home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earcd / phase5 / ppcrelease / autodocs / powerup.doc next >
Text File  |  1998-02-21  |  79KB  |  2,948 lines

  1. TABLE OF CONTENTS
  2.  
  3. PowerUPKernel/PPCAdd64
  4. PowerUPKernel/PPCAdd64p
  5. PowerUPKernel/PPCAddHead
  6. PowerUPKernel/PPCAddHeadSync
  7. PowerUPKernel/PPCAddTail
  8. PowerUPKernel/PPCAddTailSync
  9. PowerUPKernel/PPCAllocMem
  10. PowerUPKernel/PPCAllocPooled
  11. PowerUPKernel/PPCAllocSignal
  12. PowerUPKernel/PPCAllocVec
  13. PowerUPKernel/PPCAllocVecPooled
  14. PowerUPKernel/PPCAttemptSemaphore
  15. PowerUPKernel/PPCAttemptSemaphoreByName
  16. PowerUPKernel/PPCAttemptSemaphoreShared
  17. PowerUPKernel/PPCAttemptSemaphoreSharedByName
  18. PowerUPKernel/PPCCacheFlush
  19. PowerUPKernel/PPCCacheFlushAll
  20. PowerUPKernel/PPCCacheInvalid
  21. PowerUPKernel/PPCCallM68k
  22. PowerUPKernel/PPCCallOS
  23. PowerUPKernel/PPCClose
  24. PowerUPKernel/PPCCmp64
  25. PowerUPKernel/PPCCmp64p
  26. PowerUPKernel/PPCCreateMessage
  27. PowerUPKernel/PPCCreatePool
  28. PowerUPKernel/PPCCreatePort
  29. PowerUPKernel/PPCCreateSemaphore
  30. PowerUPKernel/PPCDeleteMessage
  31. PowerUPKernel/PPCDeletePool
  32. PowerUPKernel/PPCDeletePort
  33. PowerUPKernel/PPCDeleteSemaphore
  34. PowerUPKernel/PPCDivs64
  35. PowerUPKernel/PPCDivs64p
  36. PowerUPKernel/PPCDivu64
  37. PowerUPKernel/PPCDivu64p
  38. PowerUPKernel/PPCEnqueue
  39. PowerUPKernel/PPCEnqueueSync
  40. PowerUPKernel/PPCFindName
  41. PowerUPKernel/PPCFindNameSync
  42. PowerUPKernel/PPCFindTagItem
  43. PowerUPKernel/PPCFindTask
  44. PowerUPKernel/PPCFinishTask
  45. PowerUPKernel/PPCFreeMem
  46. PowerUPKernel/PPCFreePooled
  47. PowerUPKernel/PPCFreeSignal
  48. PowerUPKernel/PPCGetAttr
  49. PowerUPKernel/PPCGetMessage
  50. PowerUPKernel/PPCGetMessageAttr
  51. PowerUPKernel/PPCGetTagData
  52. PowerUPKernel/PPCGetTaskAttr
  53. PowerUPKernel/PPCInsert
  54. PowerUPKernel/PPCInsertSync
  55. PowerUPKernel/PPCMods64
  56. PowerUPKernel/PPCMods64p
  57. PowerUPKernel/PPCModu64
  58. PowerUPKernel/PPCModu64p
  59. PowerUPKernel/PPCMuls64
  60. PowerUPKernel/PPCMuls64p
  61. PowerUPKernel/PPCMulu64
  62. PowerUPKernel/PPCMulu64p
  63. PowerUPKernel/PPCNeg64
  64. PowerUPKernel/PPCNeg64p
  65. PowerUPKernel/PPCNewList
  66. PowerUPKernel/PPCNextTagItem
  67. PowerUPKernel/PPCObtainPort
  68. PowerUPKernel/PPCObtainSemaphore
  69. PowerUPKernel/PPCObtainSemaphoreByName
  70. PowerUPKernel/PPCObtainSemaphoreShared
  71. PowerUPKernel/PPCObtainSemaphoreSharedByName
  72. PowerUPKernel/PPCOpen
  73. PowerUPKernel/PPCRawDoFmt
  74. PowerUPKernel/PPCRead
  75. PowerUPKernel/PPCReleasePort
  76. PowerUPKernel/PPCReleaseSemaphore
  77. PowerUPKernel/PPCRemHead
  78. PowerUPKernel/PPCRemHeadSync
  79. PowerUPKernel/PPCRemove
  80. PowerUPKernel/PPCRemoveSync
  81. PowerUPKernel/PPCRemTail
  82. PowerUPKernel/PPCRemTailSync
  83. PowerUPKernel/PPCReplyMessage
  84. PowerUPKernel/PPCRevision
  85. PowerUPKernel/PPCSeek
  86. PowerUPKernel/PPCSendMessage
  87. PowerUPKernel/PPCSetSignal
  88. PowerUPKernel/PPCSignal
  89. PowerUPKernel/PPCSub64
  90. PowerUPKernel/PPCSub64p
  91. PowerUPKernel/PPCVersion
  92. PowerUPKernel/PPCWait
  93. PowerUPKernel/PPCWaitPort
  94. PowerUPKernel/PPCWrite
  95. ppc.library/PPCFreeVecPooled
  96. PowerUPKernel/PPCAdd64                                 PowerUPKernel/PPCAdd64
  97.  
  98.     NAME
  99.     PPCAdd64 -- Add 2 64bit integers
  100.  
  101.     SYNOPSIS
  102.     Result = PPCAdd64(highA,lowA,highB,lowB )
  103.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  104.  
  105.     long    PPCAdd64(ULONG,ULONG,ULONG,ULONG);
  106.  
  107.     FUNCTION
  108.     Adds 2 64bit integers and returns the 64bit result in 2
  109.     32bit registers.
  110.  
  111.     INPUTS
  112.     highA         - upper 32bit of value A
  113.     lowA         - lower 32bit of value A
  114.     highB         - upper 32bit of value B
  115.     lowB         - lower 32bit of value B
  116.  
  117.     RESULT
  118.     Result    - 64Bit result devided into 2 registers
  119.  
  120.     SEE ALSO
  121.     PPCAdd64p()
  122.  
  123. PowerUPKernel/PPCAdd64p                               PowerUPKernel/PPCAdd64p
  124.  
  125.     NAME
  126.     PPCAdd64p -- Add 2 64bit integers
  127.  
  128.     SYNOPSIS
  129.     PPCAdd64p(ValueAPtr,ValueBPtr)
  130.               gpr3      gpr4
  131.  
  132.     void    PPCAdd64p(long long*,long long*);
  133.  
  134.     FUNCTION
  135.     Adds 2 64bit integers and returns the 64bit result in
  136.     A.
  137.  
  138.     INPUTS
  139.     ValueAPtr    - Ptr to 64Bit value A
  140.     ValueBPtr    - Ptr to 64Bit value B
  141.  
  142.     SEE ALSO
  143.     PPCAdd64()
  144.  
  145. PowerUPKernel/PPCAddHead                             PowerUPKernel/PPCAddHead
  146.  
  147.    NAME
  148.     PPCAddHead -- insert node at the head of a list
  149.  
  150.    SYNOPSIS
  151.     PPCAddHead(list, node)
  152.                gpr3 gpr4
  153.  
  154.     void PPCAddHead(struct List *, struct Node *)
  155.  
  156.    FUNCTION
  157.     Add a node to the head of a doubly linked list.
  158.  
  159.    WARNING
  160.     This function does not arbitrate for access to the list.  The
  161.     calling task must be the owner of the involved list.
  162.  
  163.    INPUTS
  164.     list - a pointer to the target list header
  165.     node - the node to insert at head
  166.  
  167.    SEE ALSO
  168.     PPCAddTail(), PPCEnqueue(), PPCInsert(), PPCRemove(),
  169.     PPCRemHead(), PPCRemTail()
  170.  
  171. PowerUPKernel/PPCAddHeadSync                     PowerUPKernel/PPCAddHeadSync
  172.  
  173.    NAME
  174.     PPCAddHeadSync -- insert node at the head of a list
  175.  
  176.    SYNOPSIS
  177.     PPCAddHeadSync(list, node)
  178.                    gpr3 gpr4
  179.  
  180.     void PPCAddHeadSync(struct List *, struct Node *)
  181.  
  182.    FUNCTION
  183.     Add a node to the head of a doubly linked list.
  184.  
  185.    INPUTS
  186.     list - a pointer to the target list header
  187.     node - the node to insert at head
  188.  
  189.    SEE ALSO
  190.     PPCAddTailSync(), PPCEnqueueSync(), PPCInsertSync(),
  191.     PPCRemoveSync(), PPCRemHeadSync(), PPCRemTailSync()
  192.  
  193. PowerUPKernel/PPCAddTail                             PowerUPKernel/PPCAddTail
  194.  
  195.    NAME
  196.     PPCAddTail -- append node to tail of a list
  197.  
  198.    SYNOPSIS
  199.     PPCAddTail(list, node)
  200.                gpr3 gpr4
  201.  
  202.     void PPCAddTail(struct List *, struct Node *);
  203.  
  204.    FUNCTION
  205.     Add a node to the tail of a doubly linked list.
  206.  
  207.    WARNING
  208.     This function does not arbitrate for access to the list.  The
  209.     calling task must be the owner of the involved list.
  210.  
  211.    INPUTS
  212.     list - a pointer to the target list header
  213.     node - a pointer to the node to insert at tail of the list
  214.  
  215.    SEE ALSO
  216.     PPCAddHead(), PPCEnqueue(), PPCInsert(), PPCRemove(),
  217.     PPCRemHead(), PPCRemTail()
  218.  
  219. PowerUPKernel/PPCAddTailSync                     PowerUPKernel/PPCAddTailSync
  220.  
  221.    NAME
  222.     PPCAddTailSync -- append node to tail of a list
  223.  
  224.    SYNOPSIS
  225.     PPCAddTailSync(list, node)
  226.                    gpr3 gpr4
  227.  
  228.     void PPCAddTailSync(struct List *, struct Node *);
  229.  
  230.    FUNCTION
  231.     Add a node to the tail of a doubly linked list.
  232.  
  233.    INPUTS
  234.     list - a pointer to the target list header
  235.     node - a pointer to the node to insert at tail of the list
  236.  
  237.    SEE ALSO
  238.     PPCAddHeadSync(), PPCEnqueueSync(), PPCInsertSync(),
  239.     PPCRemoveSync(), PPCRemHeadSync(), PPCRemTailSync()
  240.  
  241. PowerUPKernel/PPCAllocMem                           PowerUPKernel/PPCAllocMem
  242.  
  243.     NAME
  244.     PPCAllocMem -- Alloc a PPC cache aligned memory block
  245.  
  246.     SYNOPSIS
  247.     Memory = PPCAllocMem(size,attributes )
  248.     gpr3                 gpr3 gpr4
  249.  
  250.     void *PPCAllocMem(ULONG,ULONG);
  251.  
  252.     FUNCTION
  253.     Allocates a memoryblock which is aligned to the PPC cache lines.
  254.     You should only use the PPC with memblocks allocated through
  255.     this function.
  256.  
  257.     INPUTS
  258.     Size         - memory block size
  259.     Attributes    - memory attributes
  260.  
  261.       o exec/memory.h attributes
  262.  
  263.       o MEMF_NOCACHESYNCPPC for a synchronized non cacheable mapped
  264.         memory area on the PPC side. The Amiga side is still copyback then.
  265.  
  266.       o MEMF_NOCACHESYNCM68k for a synchronized non cacheable mapped
  267.         memory area on the M68k side. The PPC side is still copyback then.
  268.  
  269.       If you use the M68k and PPC attribute at the same time the memory
  270.       is mapped noncacheable on both sides. This also means that your
  271.       allocation is 4096 Bytes aligned that may waste memory if you need
  272.       less ram.
  273.  
  274.     RESULT
  275.     Memory    - ptr to the memory block
  276.  
  277.     NOTES
  278.     The reason for this routine is that there's a serious
  279.     cache copyback problem when ppc and 68060 cache lines
  280.     cross borders. Then the contents of the memory isn't guranteed.
  281.     The cache issue is explained in detail in Docs/PowerUP.guide
  282.  
  283.     SEE ALSO
  284.     PPCFreeMem, exec/memory.h
  285.  
  286. PowerUPKernel/PPCAllocPooled                     PowerUPKernel/PPCAllocPooled
  287.  
  288.     NAME
  289.     PPCAllocPooled -- Allocate memory with the pool manager
  290.  
  291.     SYNOPSIS
  292.     memory=PPCAllocPooled(poolHeader,memSize)
  293.     gpr3                  gpr3       gpr4
  294.  
  295.     void *PPCAllocPooled(void *,ULONG);
  296.  
  297.     FUNCTION
  298.     Allocate memSize bytes of memory, and return a pointer. NULL is
  299.     returned if the allocation fails.
  300.  
  301.     Doing a DeletePool() on the pool will free all of the puddles
  302.     and thus all of the allocations done with AllocPooled() in that
  303.     pool.  (No need to FreePooled() each allocation)
  304.  
  305.     INPUTS
  306.     memSize - the number of bytes to allocate
  307.     poolHeader - a specific private pool header.
  308.  
  309.     RESULT
  310.     A pointer to the memory, or NULL.
  311.     The memory block returned is long word aligned.
  312.  
  313.     NOTES
  314.     The pool function do not protect an individual pool from
  315.     multiple accesses.  The reason is that in most cases the pools
  316.     will be used by a single task.  If your pool is going to
  317.     be used by more than one task you must Semaphore protect
  318.     the pool from having more than one task trying to allocate
  319.     within the same pool at the same time.
  320.  
  321.     SEE ALSO
  322.     PPCFreePooled(), PPCCreatePool(), PPCDeletePool()
  323.  
  324. PowerUPKernel/PPCAllocSignal                     PowerUPKernel/PPCAllocSignal
  325.  
  326.    NAME
  327.     PPCAllocSignal -- allocate a PPC task signal bit
  328.  
  329.    SYNOPSIS
  330.     signalNum = PPCAllocSignal(signalNum)
  331.     gpr3               gpr3
  332.  
  333.     BYTE PPCAllocSignal(BYTE);
  334.  
  335.    FUNCTION
  336.     Allocate a signal bit from the current PPC task's free signals.
  337.     Either a particular bit, or the next free bit may be allocated.
  338.     The signal associated with the bit will be properly initialized
  339.     (cleared).
  340.     At least 16 user signals are available per task.  Signals should
  341.     be deallocated before the task exits.
  342.  
  343.     If the signal is already in use (or no free signals are available)
  344.     a -1 is returned.
  345.  
  346.     Allocated signals are only valid for use with the task that
  347.     allocated them.
  348.  
  349.  
  350.    INPUTS
  351.     signalNum - the desired signal number {of 0..31} or -1 for no
  352.             preference.
  353.  
  354.    RESULTS
  355.     signalNum - the signal bit number allocated {0..31}. If no signals
  356.             are available, this function returns -1.
  357.  
  358.    SEE ALSO
  359.     PPCFreeSignal()
  360.  
  361. PowerUPKernel/PPCAllocVec                           PowerUPKernel/PPCAllocVec
  362.  
  363.     NAME
  364.     PPCAllocVec -- allocate memory and keep track of the size  (V36)
  365.  
  366.     SYNOPSIS
  367.     memoryBlock = PPCAllocVec(byteSize, attributes)
  368.     gpr3                      gpr3     gpr4
  369.  
  370.     void *PPCAllocVec(ULONG, ULONG);
  371.  
  372.     INPUTS
  373.     Size         - memory block size
  374.     Attributes    - memory attributes
  375.  
  376.       o exec/memory.h attributes
  377.  
  378.       o MEMF_NOCACHESYNCPPC for a synchronized non cacheable mapped
  379.         memory area on the PPC side. The Amiga side is still copyback then.
  380.  
  381.       o MEMF_NOCACHESYNCM68k for a synchronized non cacheable mapped
  382.         memory area on the M68k side. The PPC side is still copyback then.
  383.  
  384.       If you use the M68k and PPC attribute at the same time the memory
  385.       is mapped noncacheable on both sides. This also means that your
  386.       allocation is 4096 Bytes aligned that may waste memory if you need
  387.       less ram.
  388.  
  389.     RESULT
  390.     Memory    - ptr to the memory block
  391.  
  392.     FUNCTION
  393.     This function works identically to AllocMem(), but tracks the size
  394.     of the allocation.
  395.  
  396.     See the PPCAllocMem() documentation for details.
  397.  
  398.     WARNING
  399.     The result of any memory allocation MUST be checked, and a viable
  400.     error handling path taken.  ANY allocation may fail if memory has
  401.     been filled.
  402.     The cache issue is explained in detail in Docs/PowerUP.guide
  403.  
  404.     SEE ALSO
  405.     PPCFreeVec(), PPCAllocMem()
  406.  
  407. PowerUPKernel/PPCAllocVecPooled               PowerUPKernel/PPCAllocVecPooled
  408.  
  409.    NAME
  410.     PPCAllocVecPooled -- allocate memory with the pool manager and keep track of
  411.  the size
  412.  
  413.    SYNOPSIS
  414.     memoryBlock = PPCAllocVecPooled(Pool,byteSize)
  415.     gpr3                        gpr3     gpr4
  416.  
  417.     void *PPCAllocVecPooled(void*, ULONG);
  418.  
  419.    FUNCTION
  420.     This function works identically to PPCAllocPooled(), but tracks the size
  421.     of the allocation.
  422.  
  423.     See the PPCAllocMem() documentation for details.
  424.  
  425.    SEE ALSO
  426.     PPCFreeVecPooled(), exec/memory.h, ppclib/memory.h
  427.  
  428. PowerUPKernel/PPCAttemptSemaphore           PowerUPKernel/PPCAttemptSemaphore
  429.  
  430.    NAME
  431.     PPCAttemptSemaphore -- try to obtain without blocking
  432.  
  433.    SYNOPSIS
  434.     success = PPCAttemptSemaphore(Semaphore)
  435.     gpr3                  gpr3
  436.  
  437.     LONG PPCAttemptSemaphore(void*);
  438.  
  439.    FUNCTION
  440.     This call is similar to PPCObtainSemaphore(), except that it will not
  441.     block if the semaphore could not be locked.
  442.  
  443.    INPUT
  444.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  445.  
  446.    RESULT
  447.     success -- TRUE if the semaphore was locked, false if some
  448.         other task already possessed the semaphore.
  449.  
  450.    SEE ALSO
  451.     PPCObtainSemaphoreShared(), PPCObtainSemaphoreByName(),
  452.     PPCReleaseSemaphore(), PPCAttemptSemaphoreShared(),
  453.     PPCAttemptSemaphoreByName()
  454.  
  455. PowerUPKernel/PPCAttemptSemaphoreByNameowerUPKernel/PPCAttemptSemaphoreByName
  456.  
  457.    NAME
  458.     PPCAttemptSemaphoreByName - Attempt a public Semaphore
  459.  
  460.    SYNOPSIS
  461.     Semaphore = PPCAttemptSemaphoreByName(Name,Error)
  462.     gpr3                                  gpr3 gpr4
  463.  
  464.     void* PPCAttemptSemaphoreByName(char *,ULONG *)
  465.  
  466.    FUNCTION
  467.     Tries to find a Semaphore and does an PPCAttemptSemaphore.
  468.     No Arbitration needed.
  469.     If it succeeds the Result is TRUE and if doesn't find it
  470.     it returns the error reason at the address you given as
  471.     the ErrorPtr.
  472.     Current ErrorCodes are PPCSEMAPHOREERROR_SEMAPHORENOTFOUND or
  473.     PPCSEMAPHOREERROR_OBTAINED when the attempt hadn't succeed.
  474.  
  475.    INPUTS
  476.     Name    - Ptr to the name cstring
  477.     Error    - Ptr to an error result field
  478.  
  479.  
  480.    RESULTS
  481.     Semaphore - If FALSE no Semaphore with that name was found
  482.  
  483.    SEE ALSO
  484.     PPCAttemptSemaphore(), PPCObtainSemaphoreByName()
  485.  
  486. PowerUPKernel/PPCAttemptSemaphoreSharedowerUPKernel/PPCAttemptSemaphoreShared
  487.  
  488.    NAME
  489.     PPCAttemptSemaphoreShared -- try to obtain without blocking
  490.  
  491.    SYNOPSIS
  492.     success = PPCAttemptSemaphoreShared(Semaphore)
  493.     gpr3                        gpr3
  494.  
  495.     BOOL    PPCAttemptSemaphoreShared(void*);
  496.  
  497.    FUNCTION
  498.     This call is similar to PPCObtainSemaphoreShared(), except that it
  499.     will not block if the semaphore could not be locked.
  500.  
  501.    INPUT
  502.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  503.  
  504.    RESULT
  505.     success -- TRUE if the semaphore was granted, false if some
  506.         other task already possessed the semaphore in exclusive mode.
  507.  
  508.    SEE ALSO
  509.     PPCObtainSemaphoreShared(), PPCObtainSemaphoreByName(),
  510.     PPCReleaseSemaphore(), PPCAttemptSemaphore(),
  511.     PPCAttemptSemaphoreByName()
  512.  
  513. PowerUPKernel/PPCAttemptSemaphoreSharedByName/PPCAttemptSemaphoreSharedByName
  514.  
  515.    NAME
  516.     PPCAttemptSemaphoreSharedByName - Attempt a public Semaphore shared
  517.  
  518.    SYNOPSIS
  519.     Semaphore = PPCAttemptSemaphoreSharedByName(Name,Error)
  520.     gpr3                                        gpr3 gpr4
  521.  
  522.     void* PPCAttemptSemaphoreSharedByName(char *,ULONG *)
  523.  
  524.    FUNCTION
  525.     Tries to find a Semaphore and does an PPCAttemptSemaphoreShared.
  526.     No Arbitration needed.
  527.     If it succeeds the Result is TRUE and if doesn't find it
  528.     it returns the error reason at the address you given as
  529.     the ErrorPtr.
  530.     Current ErrorCodes are PPCSEMAPHOREERROR_SEMAPHORENOTFOUND or
  531.     PPCSEMAPHOREERROR_OBTAINED when the attempt hadn't succeed.
  532.  
  533.    INPUTS
  534.     Name    - Ptr to the name cstring
  535.     Error    - Ptr to an error result field
  536.  
  537.  
  538.    RESULTS
  539.     Semaphore - If FALSE no Semaphore with that name was found
  540.  
  541.    SEE ALSO
  542.     PPCAttemptSemaphoreShared(), PPCObtainSemaphoreSharedByName()
  543.  
  544. PowerUPKernel/PPCCacheFlush                       PowerUPKernel/PPCCacheFlush
  545.  
  546.    NAME
  547.     PPCCacheFlush - User callable custom cache clearing
  548.  
  549.    SYNOPSIS
  550.     PPCCacheFlush(Address,Length)
  551.                   gpr3    gpr4
  552.  
  553.     void PPCCacheFlush(APTR,ULONG);
  554.  
  555.    FUNCTION
  556.     Flush out the contents of the instruction and Data PPC cache in
  557.     a certain address space. Useful to optimize the shared memory
  558.     handling because flushing the whole cache may not what you
  559.     want.
  560.     If dirty data cache lines are present, push them to memory first.
  561.  
  562.     Caches must be cleared after *any* operation that could cause
  563.     invalid or stale data.  The most common cases are DMA,modifying
  564.     instructions using the processor or modifying Data which is
  565.     shared by the 680xx and PPC.
  566.  
  567.    ATTENTION
  568.     Please read the PowerUP.guide Cache chapter before you use
  569.     this function.
  570.  
  571.    SEE ALSO
  572.     PPCCacheFlushAll(), PPCCacheInvalid()
  573.  
  574. PowerUPKernel/PPCCacheFlushAll                 PowerUPKernel/PPCCacheFlushAll
  575.  
  576.    NAME
  577.     PPCCacheFlushAll - User callable simple cache clearing
  578.  
  579.    SYNOPSIS
  580.     PPCCacheFlushAll()
  581.  
  582.     void PPCCacheFlushAll(void);
  583.  
  584.    FUNCTION
  585.     Flush out the contents of the instruction and Data PPC cache.
  586.     If dirty data cache lines are present, push them to memory first.
  587.  
  588.     Caches must be cleared after *any* operation that could cause
  589.     invalid or stale data.  The most common cases are DMA,modifying
  590.     instructions using the processor or modifying Data which is
  591.     shared by the 680xx and PPC.
  592.  
  593.    ATTENTION
  594.     Please read the PowerUP.guide Cache chapter before you use
  595.     this function.
  596.  
  597.    SEE ALSO
  598.     PPCCacheFlush(), PPCCacheInvalid()
  599.  
  600. PowerUPKernel/PPCCacheInvalid                   PowerUPKernel/PPCCacheInvalid
  601.  
  602.    NAME
  603.     PPCCacheInvalid - User callable custom cache invalidating
  604.  
  605.    SYNOPSIS
  606.     PPCCacheInvalid(Address,Length)
  607.                     gpr3    gpr4
  608.  
  609.     void PPCCacheInvalid(APTR,ULONG);
  610.  
  611.    FUNCTION
  612.     Invalid the contents of the instruction and Data PPC cache in
  613.     a certain address space. Useful to optimize the shared memory
  614.     handling because flushing the whole cache may not what you
  615.     want. This function doesn`t write back the contents of the used
  616.     dirty cache lines.
  617.     Be also aware that the Address must be PPC cache line aligned,
  618.     to avoid that you invalid cache lines you partly use.
  619.  
  620.    ATTENTION
  621.     Please read the PowerUP.guide Cache chapter before you use
  622.     this function.
  623.  
  624.    SEE ALSO
  625.     PPCCacheFlushAll(), PPCCacheFlush()
  626.  
  627. PowerUPKernel/PPCCallM68k                           PowerUPKernel/PPCCallM68k
  628.  
  629.     NAME
  630.     PPCCallM68k -- Calls a M68k Function
  631.  
  632.     SYNOPSIS
  633.     PPCCallM68k(Caos)
  634.                 gpr3
  635.  
  636.     ULONG PPCCallM68k(struct Caos*);
  637.  
  638.     FUNCTION
  639.     Calls a m68k function and returns the result. You have
  640.     to be very careful with what the function does.
  641.  
  642.     INPUTS
  643.     Caos    - The lib,offset,register structure
  644.  
  645.     EXAMPLE
  646.     Caos.caos_Un.Function - needs the function address
  647.     Caos.d0-a6            - take the parameters
  648.  
  649.     NOTE
  650.     This function won`t be supported by a recompile
  651.     for the ABox OS. It may only run in an AmigaOS
  652.     emulation.
  653.  
  654.     DESCRIPTION
  655.     For calling functions from the PPC under M68k AmigaOS or for
  656.     calling functions on the PPC Supervisor mode you have to care
  657.     for the cache issues. Please read the Cache chapter in the
  658.     docs/powerup.guide about the cache problems involved.
  659.     If you do something wrong here you can expect that you loose
  660.     data, get wrong data or simply crash the machine.
  661.     The caos register fields are updated with the register values
  662.     when the M68k function exits.(V45)
  663.  
  664.     IF_CACHEFLUSHNO:
  665.     You use this mode for the cpu if your function
  666.     touches no memory both cpus use.
  667.  
  668.     Example: Close(File)
  669.              If you call this function by the PPC there`s no need
  670.              to flush the cache because the PPC isn`t allowed to
  671.              touch any memory which has to do with the File BPTR.
  672.     ATTENTION:
  673.              The PPC MUST NOT be used to poke into AmigaOS system
  674.              structures.
  675.  
  676.     IF_CACHEFLUSHALL:
  677.     You use this mode for the cpu if your function
  678.     touches memory both cpus use and it`s no simple memory area
  679.     which may be flushed individually. This should be used by default.
  680.  
  681.     Example: OpenWindowTagList(NewWindow,TagList)
  682.              Here you pass a complex data structure which may use
  683.              memory areas at several different areas.
  684.  
  685.     IF_CACHEFLUSHAREA:
  686.     You use this mode for the cpu if your function
  687.     touches memory both cpus use and it`s a memory area which isn`t
  688.     very big. It depends on the size and how many lines are dirty
  689.     if this is faster than IF_CACHEFLUSHALL.
  690.     With the Start and Length fields of each cpu you can define
  691.     the area.
  692.  
  693.     Example: Write(File,Address,Length)
  694.              When the PPC runs this function the PPC must make sure
  695.              that all data in the to be written memory area is in
  696.              in the memory and not only in the cache.
  697.  
  698.     IF_CACHEINVALIDAREA: (V45)
  699.     You use this mode for the cpu if your function
  700.     touches memory both cpus use and it`s a memory area where you
  701.     don`t care for valid data anymore.
  702.     With the Start and Length fields of each cpu you can define
  703.     the area.
  704.  
  705.     Example: Read(File,Address,Length)
  706.              When the PPC runs this function the PPC has no need
  707.              anymore for anything which is in its cache for the
  708.              area the Address and Length define, so you could
  709.              invalidate this instead of doing a cacheflush which
  710.              may write back dirty lines.
  711.              Be VERY careful about this.
  712.  
  713.     ATTENTION! The Address must be 32Byte aligned, so you should always
  714.     use PPCAllocMem for data which is used on the M68k and PPC
  715.     You are NOT allowed to use normal pools for exchanging data between
  716.     the M68k and PPC.
  717.  
  718.     IF_ASYNC: (V45)
  719.     If you use this flag, the function is called asynchronous and
  720.     the PPC doesn`t have to wait for a result.
  721.     This flag is only checked in the M68kCacheMode field.
  722.     This also means that the result of the PPCCall#? function
  723.     is meaningless.
  724.     Normally this flag doesn`t really fit into a CacheMode flag, but
  725.     well..too bad i haven`t declared another flag field there.
  726.  
  727.     SEE ALSO
  728.     PPCCallOS()
  729.  
  730. PowerUPKernel/PPCCallOS                               PowerUPKernel/PPCCallOS
  731.  
  732.     NAME
  733.     PPCCallOS -- Calls an OS Library Function
  734.  
  735.     SYNOPSIS
  736.     PPCCallOS(Caos)
  737.               gpr3
  738.  
  739.     ULONG PPCCallOS(struct Caos*);
  740.  
  741.     FUNCTION
  742.     Calls an OS function and returns the result. You have
  743.     to be very careful which function you call. With
  744.     FD2Inline you can create all inline AmigaOS inline calls.
  745.  
  746.     INPUTS
  747.     Caos    - The lib,offset,register structure
  748.  
  749.     EXAMPLE
  750.     PPCAllocMem(Size,Attribute):
  751.     Caos.caos_Un.Offset    =    LVO_AllocMem;
  752.     Caos.d0            =    Size;
  753.     Caos.d1            =    Attribute;
  754.     Caos.a6            =    SysBase;
  755.  
  756.     NOTE
  757.     This function isn`t source portable to the next
  758.     OS. It may only run in an AmigaOS emulation.
  759.  
  760.     DESCRIPTION
  761.     For calling functions from the PPC under M68k AmigaOS or for
  762.     calling functions on the PPC Supervisor mode you have to care
  763.     for the cache issues. Please read the Cache chapter in the
  764.     docs/powerup.guide about the cache problems involved.
  765.     If you do something wrong here you can expect that you loose
  766.     data, get wrong data or simply crash the machine.
  767.  
  768.     IF_CACHEFLUSHNO:
  769.     You use this mode for the cpu if your function
  770.     touches no memory both cpus use.
  771.  
  772.     Example: Close(File)
  773.              If you call this function by the PPC there`s no need
  774.              to flush the cache because the PPC isn`t allowed to
  775.              touch any memory which has to do with the File BPTR.
  776.     ATTENTION:
  777.              The PPC MUST NOT be used to poke into AmigaOS system
  778.              structures.
  779.  
  780.     IF_CACHEFLUSHALL:
  781.     You use this mode for the cpu if your function
  782.     touches memory both cpus use and it`s no simple memory area
  783.     which may be flushed individually. This should be used by default.
  784.  
  785.     Example: OpenWindowTagList(NewWindow,TagList)
  786.              Here you pass a complex data structure which may use
  787.              memory areas at several different areas.
  788.  
  789.     IF_CACHEFLUSHAREA:
  790.     You use this mode for the cpu if your function
  791.     touches memory both cpus use and it`s a memory area which isn`t
  792.     very big. It depends on the size and how many lines are dirty
  793.     if this is faster than IF_CACHEFLUSHALL.
  794.     With the Start and Length fields of each cpu you can define
  795.     the area.
  796.  
  797.     Example: Write(File,Address,Length)
  798.              When the PPC runs this function the PPC must make sure
  799.              that all data in the to be written memory area is in
  800.              in the memory and not only in the cache.
  801.  
  802.     IF_CACHEINVALIDAREA: (V45)
  803.     You use this mode for the cpu if your function
  804.     touches memory both cpus use and it`s a memory area where you
  805.     don`t care for valid data anymore.
  806.     With the Start and Length fields of each cpu you can define
  807.     the area.
  808.  
  809.     Example: Read(File,Address,Length)
  810.              When the PPC runs this function the PPC has no need
  811.              anymore for anything which is in its cache for the
  812.              area the Address and Length define, so you could
  813.              invalidate this instead of doing a cacheflush which
  814.              may write back dirty lines.
  815.              Be VERY careful about this.
  816.  
  817.     ATTENTION! The Address must be 32Byte aligned, so you should always
  818.     use PPCAllocMem for data which is used on the M68k and PPC
  819.     You are NOT allowed to use normal pools for exchanging data between
  820.     the M68k and PPC.
  821.  
  822.     IF_ASYNC: (V45)
  823.     If you use this flag, the function is called asynchronous and
  824.     the PPC doesn`t have to wait for a result.
  825.     This flag is only checked in the M68kCacheMode field.
  826.     This also means that the result of the PPCCall#? function
  827.     is meaningless.
  828.     Normally this flag doesn`t really fit into a CacheMode flag, but
  829.     well..too bad i haven`t declared another flag field there.
  830.  
  831.     SEE ALSO
  832.     CallM68k()
  833.  
  834. PowerUPKernel/PPCClose                                 PowerUPKernel/PPCClose
  835.  
  836.     NAME
  837.     PPCClose -- Close an open file
  838.  
  839.     SYNOPSIS
  840.     success = PPCClose( file )
  841.     gpr3               gpr3
  842.  
  843.     BOOL PPCClose(BPTR)
  844.  
  845.     FUNCTION
  846.     This function is equal to the dos.library/Close function.
  847.     It works on the context of the Msg Task each PPC Task has
  848.     on the AmigaOS side.
  849.  
  850.     INPUTS
  851.     file - BCPL pointer to a file handle
  852.  
  853.     RESULTS
  854.     success - returns if PPCClose() succeeded.
  855.  
  856.     SEE ALSO
  857.     PPCOpen(), PPCRead(), PPCWrite(), PPCSeek()
  858.  
  859. PowerUPKernel/PPCCmp64                                 PowerUPKernel/PPCCmp64
  860.  
  861.     NAME
  862.     PPCCmp64 -- Compare 2 64bit integers
  863.  
  864.     SYNOPSIS
  865.     Result = PPCCmp64(highA,lowA,highB,lowB )
  866.     gpr3              gpr3  gpr4 gpr5  gpr6
  867.  
  868.     int    PPCCmp64(ULONG,ULONG,ULONG,ULONG);
  869.  
  870.     FUNCTION
  871.     Compares 2 64bit integers and returns the state of
  872.     the comparision.
  873.  
  874.     INPUTS
  875.     highA         - upper 32bit of value A
  876.     lowA         - lower 32bit of value A
  877.     highB         - upper 32bit of value B
  878.     lowB         - lower 32bit of value B
  879.  
  880.     RESULT
  881.     Result    -  0 A=B
  882.                  +1 A>B
  883.                  -1 A<B
  884.     SEE ALSO
  885.     PPCCmp64p()
  886.  
  887. PowerUPKernel/PPCCmp64p                               PowerUPKernel/PPCCmp64p
  888.  
  889.     NAME
  890.     PPCCmp64p -- Compare 2 64bit integers
  891.  
  892.     SYNOPSIS
  893.     Result = PPCCmp64p(ValueAPtr,ValueBPtr)
  894.                        gpr3      gpr4
  895.  
  896.     LONG    PPCCmp64p(long long*,long long*);
  897.  
  898.     FUNCTION
  899.     Compares 2 64bit integers and returns the state of
  900.     the comparision.
  901.  
  902.     INPUTS
  903.     ValueAPtr    - Ptr to 64Bit value A
  904.     ValueBPtr    - Ptr to 64Bit value B
  905.  
  906.     RESULT
  907.     Result    -  0 A=B
  908.                  +1 A>B
  909.                  -1 A<B
  910.  
  911.     SEE ALSO
  912.     PPCCmp64()
  913.  
  914. PowerUPKernel/PPCCreateMessage                 PowerUPKernel/PPCCreateMessage
  915.  
  916.     NAME
  917.     PPCCreateMessage -- Create a Message for a PPCMsgPort
  918.  
  919.     SYNOPSIS
  920.     Message = PPCCreateMessage(PPCPort,Length)
  921.     gpr3                       gpr3    gpr4
  922.  
  923.     void* PPCCreateMessage(void*,ULONG);
  924.  
  925.     FUNCTION
  926.     Creates a Message for PPCPort communication.
  927.        The Length parameter may be useful in the future to optimize
  928.     messages in certain addressspace mappings for IPC in a MP system.
  929.     It isn`t necessary to specify a Length which is > max(DataSize)
  930.     but it may result in a performance win in the future.
  931.     A message and msgdata can`t be reused or touched after a SendMessage
  932.     until the message was replied.
  933.  
  934.     INPUTS
  935.     PPCPort    - Ptr to an object generated by PPCCreatePort
  936.     Length  - Max Length for Messages
  937.  
  938.     RESULT
  939.     PPCMessage - PPCMessage Object ptr.
  940.  
  941.     SEE ALSO
  942.     PPCDeleteMessage(), ppclib/message.h
  943.  
  944. PowerUPKernel/PPCCreatePool                       PowerUPKernel/PPCCreatePool
  945.  
  946.     NAME
  947.     PPCCreatePool -- Generate a private memory pool header
  948.  
  949.     SYNOPSIS
  950.     newPool=PPCCreatePool(memFlags,puddleSize,threshSize)
  951.     gpr3                  gpr3     gpr4       gpr5
  952.  
  953.     void *PPCCreatePool(ULONG,ULONG,ULONG);
  954.  
  955.     FUNCTION
  956.     Allocate and prepare a new memory pool header.    Each pool is a
  957.     separate tracking system for memory of a specific type.  Any number
  958.     of pools may exist in the system.
  959.  
  960.     Pools automatically expand and shrink based on demand.    Fixed sized
  961.     "puddles" are allocated by the pool manager when more total memory
  962.     is needed.  Many small allocations can fit in a single puddle.
  963.     Allocations larger than the threshSize are allocation in their own
  964.     puddles.
  965.  
  966.     At any time individual allocations may be freed.  Or, the entire
  967.     pool may be removed in a single step.
  968.  
  969.     INPUTS
  970.     memFlags - a memory flags specifier, as taken by AllocMem.
  971.  
  972.       o exec/memory.h attributes
  973.  
  974.       o MEMF_NOCACHESYNCPPC for a synchronized non cacheable mapped
  975.         memory area on the PPC side. The Amiga side is still copyback then.
  976.  
  977.       o MEMF_NOCACHESYNCM68k for a synchronized non cacheable mapped
  978.         memory area on the M68k side. The PPC side is still copyback then.
  979.  
  980.       If you use the M68k and PPC attribute at the same time the memory
  981.       is mapped noncacheable on both sides. This also means that your
  982.       allocation is 4096 Bytes aligned that may waste memory if you need
  983.       less ram.
  984.  
  985.     puddleSize - the size of Puddles...
  986.     threshSize - the largest allocation that goes into normal puddles
  987.                  This *MUST* be less than or equal to puddleSize
  988.                  (CreatePool() will fail if it is not)
  989.  
  990.     RESULT
  991.     The address of a new pool header, or NULL for error.
  992.  
  993.     SEE ALSO
  994.     PPCDeletePool(), PPCAllocPooled(), PPCFreePooled(), exec/memory.i
  995.  
  996. PowerUPKernel/PPCCreatePort                       PowerUPKernel/PPCCreatePort
  997.  
  998.     NAME
  999.     PPCCreatePort -- Create a PPC Message Port
  1000.  
  1001.     SYNOPSIS
  1002.     Port = PPCCreatePort(Tags)
  1003.     gpr3                 gpr3
  1004.  
  1005.     void* PPCCreatePort(struct TagItem*);
  1006.  
  1007.     FUNCTION
  1008.     Creates a local PPC MsgPort to receive messages from the PPC.
  1009.        With a specified name you can mark it public to the ppc.library.
  1010.        This shouldn`t be missunderstood as a public system port because
  1011.     PPCPorts and Amigaports are different entities.
  1012.  
  1013.     INPUTS
  1014.     Tags        - Tags to specify a public port for example.
  1015.  
  1016.       o PPCPORTTAG_NAME,"Name"
  1017.         defines the name of a public PPC port.
  1018.  
  1019.       o PPCPORTTAG_ERROR,(ULONG*) ErrorPtr
  1020.         defines the ptr for a more precise return error result
  1021.  
  1022.     RESULT
  1023.     Port - the PPCPort object or NULL
  1024.  
  1025.     SEE ALSO
  1026.     PPCDeletePort(), ppclib/message.h
  1027.  
  1028. PowerUPKernel/PPCCreateSemaphore             PowerUPKernel/PPCCreateSemaphore
  1029.  
  1030.    NAME
  1031.     PPCCreateSemaphore - Create a semaphore object
  1032.  
  1033.    SYNOPSIS
  1034.     PPCCreateSemaphore(Tags)
  1035.                        gpr3
  1036.  
  1037.     void* PPCCreateSemaphoreA(struct TagItem *Tags)
  1038.  
  1039.    FUNCTION
  1040.     creates a Semaphore object for the usage with the semaphore functions.
  1041.  
  1042.    INPUTS
  1043.     MyTags - Here you have to specify all needed Tags.
  1044.  
  1045.  
  1046.    RESULTS
  1047.     Semaphore - If NULL the error code is available through the
  1048.                    SEMAPHORETAG_ERROR
  1049.  
  1050.  
  1051.    SEE ALSO
  1052.     PPCObtainSemaphore(), PPCObtainSemaphoreByName(),
  1053.     PPCReleaseSemaphore(), PPCObtainSemaphoreShared(),
  1054.     PPCAttemptSemaphore(), PPCAttemptSemaphoreByName()
  1055.  
  1056. PowerUPKernel/PPCDeleteMessage                 PowerUPKernel/PPCDeleteMessage
  1057.  
  1058.     NAME
  1059.     PPCDeleteMessage -- Delete a PPC Message
  1060.  
  1061.     SYNOPSIS
  1062.     PPCDeleteMessage(PPCMessage)
  1063.                      gpr3
  1064.  
  1065.     void PPCDeleteMessage(void*);
  1066.  
  1067.     FUNCTION
  1068.     Deletes a PPC Message. You can only delete a msg your
  1069.     task allocated and which has already been replied or not
  1070.     send out.
  1071.  
  1072.     INPUTS
  1073.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  1074.  
  1075.     SEE ALSO
  1076.     PPCCreatePort(), ppclib/message.h
  1077.  
  1078. PowerUPKernel/PPCDeletePool                       PowerUPKernel/PPCDeletePool
  1079.  
  1080.     NAME
  1081.     PPCDeletePool --  Drain an entire memory pool
  1082.  
  1083.     SYNOPSIS
  1084.     PPCDeletePool(poolHeader)
  1085.                   gpr3
  1086.  
  1087.     void PPCDeletePool(void *);
  1088.  
  1089.     FUNCTION
  1090.     Frees all memory in all pudles of the specified pool header, then
  1091.     deletes the pool header.  Individual free calls are not needed.
  1092.  
  1093.     INPUTS
  1094.     poolHeader - as returned by CreatePool().
  1095.  
  1096.     SEE ALSO
  1097.     PPCCreatePool(), PPCAllocPooled(), PPCFreePooled()
  1098.  
  1099. PowerUPKernel/PPCDeletePort                       PowerUPKernel/PPCDeletePort
  1100.  
  1101.     NAME
  1102.     PPCDeletePort -- Delete a PPC Message Port
  1103.  
  1104.     SYNOPSIS
  1105.     Success = PPCDeletePort(PPCPort)
  1106.     gpr3                    gpr3
  1107.  
  1108.     BOOL PPCDeletePort(void*);
  1109.  
  1110.     FUNCTION
  1111.     Deletes a local PPC MsgPort when the Port isn`t obtained
  1112.     by somebody else. If it`s obtained it returns FALSE so
  1113.     you have to decide yourself how you wanna recover this
  1114.     problem which maybe caused by a synchronizing problem
  1115.     between your M68k and PPC applications
  1116.  
  1117.     INPUTS
  1118.     PPCPort    - PPCPort object generated by PPCCreatePort
  1119.  
  1120.     SEE ALSO
  1121.     PPCCreatePort,ppclib/message.h
  1122.  
  1123. PowerUPKernel/PPCDeleteSemaphore             PowerUPKernel/PPCDeleteSemaphore
  1124.  
  1125.    NAME
  1126.     PPCDeleteSemaphore - Delete Semaphore
  1127.  
  1128.    SYNOPSIS
  1129.     PPCDeleteSemaphore(Semaphore)
  1130.                        gpr3
  1131.  
  1132.     void PPCDeleteSemaphore(void*)
  1133.  
  1134.    FUNCTION
  1135.     deletes a Semaphore. If it can't delete it because
  1136.     of a remaining a PPCObtainSemaphore, the semaphore
  1137.     is deleted afterwards.
  1138.  
  1139.    INPUTS
  1140.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  1141.  
  1142.    SEE ALSO
  1143.     PPCCreateSemaphore()
  1144.  
  1145. PowerUPKernel/PPCDivs64                               PowerUPKernel/PPCDivs64
  1146.  
  1147.     NAME
  1148.     PPCDivs64 -- Divide 2 signed 64bit integers
  1149.  
  1150.     SYNOPSIS
  1151.     Result = PPCDivs64(highA,lowA,highB,lowB )
  1152.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1153.  
  1154.     long    PPCDivs64(ULONG,ULONG,ULONG,ULONG);
  1155.  
  1156.     FUNCTION
  1157.     Multiplies 2 signed 64bit integers and
  1158.     returns the 64bit result in A.
  1159.  
  1160.     INPUTS
  1161.     highA         - upper 32bit of value A
  1162.     lowA         - lower 32bit of value A
  1163.     highB         - upper 32bit of value B
  1164.     lowB         - lower 32bit of value B
  1165.  
  1166.     RESULT
  1167.     Result    - 64Bit result devided into 2 registers
  1168.  
  1169.     SEE ALSO
  1170.     PPCDivs64p()
  1171.  
  1172. PowerUPKernel/PPCDivs64p                             PowerUPKernel/PPCDivs64p
  1173.  
  1174.     NAME
  1175.     PPCDivs64p -- Divide 2 signed 64bit integers
  1176.  
  1177.     SYNOPSIS
  1178.     PPCDivs64p(ValueAPtr,ValueBPtr)
  1179.                gpr3      gpr4
  1180.  
  1181.     void    PPCDivs64p(long long*,long long*);
  1182.  
  1183.     FUNCTION
  1184.     Multiplies 2 signed 64bit integers and
  1185.     returns the 64bit result in A.
  1186.  
  1187.     INPUTS
  1188.     ValueAPtr    - Ptr to 64Bit value A
  1189.     ValueBPtr    - Ptr to 64Bit value B
  1190.  
  1191.     SEE ALSO
  1192.     PPCDivs64()
  1193.  
  1194. PowerUPKernel/PPCDivu64                               PowerUPKernel/PPCDivu64
  1195.  
  1196.     NAME
  1197.     PPCDivu64 -- Divide 2 unsigned 64bit integers
  1198.  
  1199.     SYNOPSIS
  1200.     Result = PPCDivu64(highA,lowA,highB,lowB )
  1201.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1202.  
  1203.     long    PPCDivu64(ULONG,ULONG,ULONG,ULONG);
  1204.  
  1205.     FUNCTION
  1206.     Multiplies 2 unsigned 64bit integers and
  1207.     returns the 64bit result in A.
  1208.  
  1209.     INPUTS
  1210.     highA         - upper 32bit of value A
  1211.     lowA         - lower 32bit of value A
  1212.     highB         - upper 32bit of value B
  1213.     lowB         - lower 32bit of value B
  1214.  
  1215.     RESULT
  1216.     Result    - 64Bit result devided into 2 registers
  1217.  
  1218.     SEE ALSO
  1219.     PPCDivu64p()
  1220.  
  1221. PowerUPKernel/PPCDivu64p                             PowerUPKernel/PPCDivu64p
  1222.  
  1223.     NAME
  1224.     PPCDivu64p -- Divide 2 unsigned 64bit integers
  1225.  
  1226.     SYNOPSIS
  1227.     PPCDivu64p(ValueAPtr,ValueBPtr)
  1228.                gpr3      gpr4
  1229.  
  1230.     void    PPCDivu64p(long long*,long long*);
  1231.  
  1232.     FUNCTION
  1233.     Multiplies 2 unsigned 64bit integers and
  1234.     returns the 64bit result in A.
  1235.  
  1236.     INPUTS
  1237.     ValueAPtr    - Ptr to 64Bit value A
  1238.     ValueBPtr    - Ptr to 64Bit value B
  1239.  
  1240.     SEE ALSO
  1241.     PPCDivu64()
  1242.  
  1243. PowerUPKernel/PPCEnqueue                             PowerUPKernel/PPCEnqueue
  1244.  
  1245.    NAME
  1246.     PPCEnqueue -- insert or append node to a system queue
  1247.  
  1248.    SYNOPSIS
  1249.     PPCEnqueue(list, node)
  1250.                gpr3  gpr4 
  1251.  
  1252.     void PPCEnqueue(struct List *, struct Node *);
  1253.  
  1254.    FUNCTION
  1255.     Insert or append a node into a system queue.  The insert is
  1256.     performed based on the node priority -- it will keep the list
  1257.     properly sorted.  New nodes will be inserted in front of the first
  1258.     node with a lower priority.   Hence a FIFO queue for nodes of equal
  1259.     priority
  1260.  
  1261.    WARNING
  1262.     This function does not arbitrate for access to the list.  The
  1263.     calling task must be the owner of the involved list.
  1264.  
  1265.    INPUTS
  1266.     list - a pointer to the system queue header
  1267.     node - the node to enqueue.  This must be a full featured node
  1268.            with type, priority and name fields.
  1269.  
  1270.    SEE ALSO
  1271.     PPCAddHead(), PPCAddTail(), PPCInsert(), PPCRemove(),
  1272.     PPCRemHead(), PPCRemTail()
  1273.  
  1274. PowerUPKernel/PPCEnqueueSync                     PowerUPKernel/PPCEnqueueSync
  1275.  
  1276.    NAME
  1277.     PPCEnqueueSync -- insert or append node to a system queue
  1278.  
  1279.    SYNOPSIS
  1280.     PPCEnqueueSync(list, node)
  1281.                    gpr3  gpr4 
  1282.  
  1283.     void PPCEnqueueSync(struct List *, struct Node *);
  1284.  
  1285.    FUNCTION
  1286.     Insert or append a node into a system queue.  The insert is
  1287.     performed based on the node priority -- it will keep the list
  1288.     properly sorted.  New nodes will be inserted in front of the first
  1289.     node with a lower priority.   Hence a FIFO queue for nodes of equal
  1290.     priority
  1291.  
  1292.    INPUTS
  1293.     list - a pointer to the system queue header
  1294.     node - the node to enqueue.  This must be a full featured node
  1295.            with type, priority and name fields.
  1296.  
  1297.    SEE ALSO
  1298.     PPCAddHeadSync(), PPCAddTailSync(), PPCInsertSync(),
  1299.     PPCRemoveSync(), PPCRemHeadSync(), PPCRemTailSync()
  1300.  
  1301. PowerUPKernel/PPCFindName                           PowerUPKernel/PPCFindName
  1302.  
  1303.    NAME
  1304.     PPCFindName -- find a system list node with a given name
  1305.  
  1306.    SYNOPSIS
  1307.     node = PPCFindName(start, name)
  1308.     gpr3               gpr3  gpr4
  1309.  
  1310.     struct Node *PPCFindName(struct List *, STRPTR);
  1311.  
  1312.    FUNCTION
  1313.     Traverse a system list until a node with the given name is found.
  1314.     To find multiple occurrences of a string, this function may be
  1315.     called with a node starting point.
  1316.  
  1317.    WARNING
  1318.     This function does not arbitrate for access to the list.  The
  1319.     calling task must be the owner of the involved list.
  1320.  
  1321.    INPUTS
  1322.     start - a list header or a list node to start the search
  1323.         (if node, this one is skipped)
  1324.     name - a pointer to a name string terminated with NULL
  1325.  
  1326.    RESULTS
  1327.     node - a pointer to the node with the same name else
  1328.            NULL to indicate that the string was not found.
  1329.  
  1330. PowerUPKernel/PPCFindNameSync                   PowerUPKernel/PPCFindNameSync
  1331.  
  1332.    NAME
  1333.     PPCFindNameSync -- find a system list node with a given name
  1334.  
  1335.    SYNOPSIS
  1336.     node = PPCFindNameSync(start, name)
  1337.     gpr3                   gpr3  gpr4
  1338.  
  1339.     struct Node *PPCFindNameSync(struct List *, STRPTR);
  1340.  
  1341.    FUNCTION
  1342.     Traverse a system list until a node with the given name is found.
  1343.     To find multiple occurrences of a string, this function may be
  1344.     called with a node starting point.
  1345.  
  1346.    INPUTS
  1347.     start - a list header or a list node to start the search
  1348.         (if node, this one is skipped)
  1349.     name - a pointer to a name string terminated with NULL
  1350.  
  1351.    RESULTS
  1352.     node - a pointer to the node with the same name else
  1353.         zero to indicate that the string was not found.
  1354.  
  1355. PowerUPKernel/PPCFindTagItem                     PowerUPKernel/PPCFindTagItem
  1356.  
  1357.     NAME
  1358.     PPCFindTagItem -- Scans TagItem list for a Tag.
  1359.  
  1360.     SYNOPSIS
  1361.     tag = PPCFindTagItem( tagVal, tagList)
  1362.     gpr3             gpr3     gpr4
  1363.  
  1364.     struct TagItem *PPCFindTagItem(Tag tagVal,struct TagItem *tagList);
  1365.  
  1366.     FUNCTION
  1367.     Scans a TagItem "List", which is in fact a chain of arrays
  1368.     of TagItem structures as defined in utility/tagitem.h.
  1369.     Returns a pointer to the FIRST item with ti_Tag matching the
  1370.     'TagVal' parameter.
  1371.  
  1372.     INPUTS
  1373.     tagVal         - Tag value to search for.
  1374.     tagList        - beginning of TagItem list to scan.
  1375.  
  1376.     RESULT
  1377.     Returns a pointer to the item with ti_Tag matching 'TagVal'.
  1378.     Returns NULL if there is no match or if TagList is NULL.
  1379.  
  1380.     SEE ALSO
  1381.     utility/tagitem.h, PPCGetTagData(), PPCNextTagItem()
  1382.  
  1383. PowerUPKernel/PPCFindTask                           PowerUPKernel/PPCFindTask
  1384.  
  1385.    NAME
  1386.     PPCFindTask -- find a PPC task with the given name or find oneself
  1387.  
  1388.    SYNOPSIS
  1389.     task = PPCFindTask(name)
  1390.     gpr3           gpr4
  1391.  
  1392.     void* PPCFindTask(char*);
  1393.  
  1394.    FUNCTION
  1395.     This function will check all PPC task queues for a task with
  1396.     the given name, and return a pointer to its task control block.
  1397.     If a NULL name pointer is given a pointer to the current task
  1398.     will be    returned.
  1399.  
  1400.     Finding oneself with a NULL for the name is very quick.  Finding a
  1401.     task by name is very system expensive, and will disable PPCTask
  1402.     switching for a long time.
  1403.  
  1404.    INPUT
  1405.     name - pointer to a name string
  1406.  
  1407.    RESULT
  1408.     PPCtask - PPCTask Object
  1409.  
  1410. PowerUPKernel/PPCFinishTask                       PowerUPKernel/PPCFinishTask
  1411.  
  1412.     NAME
  1413.     PPCFinishTask -- End your PPC Task
  1414.  
  1415.     SYNOPSIS
  1416.     PPCFindishTask(Result)
  1417.  
  1418.     void PPCFinishTask(ULONG)
  1419.  
  1420.     FUNCTION
  1421.     Ends the current task and removes it from the tasklist.
  1422.     Then it sends the M68k Msgtask the Finish Msg which may
  1423.     send back the Startup message or notify the debugger
  1424.     by the exit of the ppc task.
  1425.     This function doesn`t free the ElfObject.
  1426.  
  1427.    RESULT
  1428.     Result - Result code of the task.
  1429.  
  1430.    SEE ALSO
  1431.     ppc.library/PPCDeleteTask()
  1432.  
  1433. PowerUPKernel/PPCFreeMem                             PowerUPKernel/PPCFreeMem
  1434.  
  1435.     NAME
  1436.     PPCFreeMem -- Frees a PPC cache aligned memory block
  1437.  
  1438.     SYNOPSIS
  1439.     PPCFreeMem(Memory,size)
  1440.                gpr3   gpr4
  1441.  
  1442.     void PPCFreeMem(APTR,ULONG);
  1443.  
  1444.     FUNCTION
  1445.     Frees a memoryblock which was allocated by PPCAllocMem
  1446.  
  1447.     INPUTS
  1448.     MemoryBlock    - memory block
  1449.     Size         - memory block size
  1450.  
  1451.     NOTES
  1452.     The reason for this routine is that there's a serious
  1453.     cache copyback problem when ppc cache line and 68060 cache line
  1454.     cross borders. Then the contents of the memory isn't guranteed.
  1455.     The cache issue is explained in detail in Docs/PowerUP.guide
  1456.  
  1457.     SEE ALSO
  1458.     PPCAllocMem(), exec/memory.h
  1459.  
  1460. PowerUPKernel/PPCFreePooled                       PowerUPKernel/PPCFreePooled
  1461.  
  1462.     NAME
  1463.     PPCFreePooled -- Free pooled memory
  1464.  
  1465.     SYNOPSIS
  1466.     PPCFreePooled(poolHeader,memory,memSize)
  1467.                   gpr3       gpr4   gpr5
  1468.  
  1469.     void PPCFreePooled(void *,void *,ULONG);
  1470.  
  1471.     FUNCTION
  1472.     Deallocates memory allocated by AllocPooled().  The size of the
  1473.     allocation *MUST* match the size given to AllocPooled().
  1474.     The reason the pool functions do not track individual allocation
  1475.     sizes is because many of the uses of pools have small allocation
  1476.     sizes and the tracking of the size would be a large overhead.
  1477.  
  1478.     Only memory allocated by AllocPooled() may be freed with this
  1479.     function!
  1480.  
  1481.     Doing a DeletePool() on the pool will free all of the puddles
  1482.     and thus all of the allocations done with AllocPooled() in that
  1483.     pool.  (No need to FreePooled() each allocation)
  1484.  
  1485.     INPUTS
  1486.     memory - pointer to memory allocated by AllocPooled.
  1487.     poolHeader - a specific private pool header.
  1488.  
  1489.     NOTES
  1490.     The pool function do not protect an individual pool from
  1491.     multiple accesses.  The reason is that in most cases the pools
  1492.     will be used by a single task.  If your pool is going to
  1493.     be used by more than one task you must Semaphore protect
  1494.     the pool from having more than one task trying to allocate
  1495.     within the same pool at the same time.
  1496.  
  1497.     SEE ALSO
  1498.     PPCAllocPooled(), PPCCreatePool(), PPCDeletePool()
  1499.  
  1500. PowerUPKernel/PPCFreeSignal                       PowerUPKernel/PPCFreeSignal
  1501.  
  1502.    NAME
  1503.     PPCFreeSignal -- free a signal PPC task bit
  1504.  
  1505.    SYNOPSIS
  1506.     PPCFreeSignal(signalNum)
  1507.               gpr3
  1508.  
  1509.     void PPCFreeSignal(BYTE);
  1510.  
  1511.    FUNCTION
  1512.     This function frees a previously allocated signal bit for reuse.
  1513.     This call must be performed while running in the same PPC task
  1514.     in which the signal was allocated.
  1515.  
  1516.    INPUTS
  1517.     signalNum - the signal number to free {0..31}.
  1518.  
  1519.    SEE ALSO
  1520.     PPCAllocSignal()
  1521.  
  1522. PowerUPKernel/PPCGetAttr                             PowerUPKernel/PPCGetAttr
  1523.  
  1524.     NAME
  1525.     PPCGetAttr -- Get PPC Attr                     (V45)
  1526.  
  1527.     SYNOPSIS
  1528.     Result = PPCGetAttrs(Tag)
  1529.     gpr3                 gpr3
  1530.  
  1531.     ULONG PPCGetAttr(ULONG);
  1532.  
  1533.     FUNCTION
  1534.     Gives you infos about the PPC enviroment depending on the tag.
  1535.  
  1536.     INPUTS
  1537.     Tags - The supported tags
  1538.  
  1539.     o PPCINFOTAG_CPU
  1540.       returns the version of the processor to detect the PPC
  1541.       type the system is running on. See your PowerPC Manuals
  1542.       "pvr" descriptions and check out the include "/ppclib/ppc.h.
  1543.       Use the ti_Data field as the processor number.
  1544.  
  1545.     o PPCINFOTAG_CPUREV
  1546.       returns the revision of the processor.
  1547.       Use the ti_Data field as the processor number.
  1548.     
  1549.     o PPCINFOTAG_CPUCOUNT
  1550.       returns the numbers of processors
  1551.  
  1552.     o PPCINFOTAG_CPUCLOCK
  1553.       returns the clock of the cpu in Mhz.
  1554.       Use the ti_Data field as the processor number.
  1555.  
  1556.     o PPCINFOTAG_CPUPLL
  1557.       returns the clock devider of the cpu.
  1558.       Use the ti_Data field as the processor number.
  1559.  
  1560.     RESULT
  1561.     result    - depends on the requested Tags
  1562.  
  1563.     SEE ALSO
  1564.     ppclib/ppc.h
  1565.  
  1566. PowerUPKernel/PPCGetMessage                       PowerUPKernel/PPCGetMessage
  1567.  
  1568.     NAME
  1569.     PPCGetMessage -- Gets a PPC Message from a PPC Port
  1570.  
  1571.     SYNOPSIS
  1572.     Message = PPCGetMessage(PPCPort)
  1573.     gpr3                    gpr3
  1574.  
  1575.     void* PPCGetMessage(void*);
  1576.  
  1577.     FUNCTION
  1578.     Checks for a message in the PPCPort`s msglist and removes
  1579.     it from the queue.
  1580.     Until you haven`t replied the PPC Message you can read from
  1581.     the embedded Data field informations. You MUST NOT write to
  1582.     these informations.
  1583.  
  1584.     INPUTS
  1585.     PPCPort - Ptr to PPC Port
  1586.  
  1587.     RESULT
  1588.     PPCMessage - First PPC Message in the PPC Port msglist or NULL if the
  1589.                  the msglist is empty.
  1590.  
  1591.     SEE ALSO
  1592.     PPCReplyMessage(), PPCCreateMessage(), ppclib/message.h
  1593.  
  1594. PowerUPKernel/PPCGetMessageAttr               PowerUPKernel/PPCGetMessageAttr
  1595.  
  1596.     NAME
  1597.     PPCGetMessageAttr -- Get Infos about a PPC Message
  1598.  
  1599.     SYNOPSIS
  1600.     Result = PPCGetMessageAttr(PPCMessage,Attr)
  1601.     gpr3                       gpr3       gpr4
  1602.  
  1603.     ULONG PPCGetMessageAttr(void*,ULONG);
  1604.  
  1605.     FUNCTION
  1606.     Returns informations about a PPC Message. This way you
  1607.     can get a Ptr to the Data the message transports and
  1608.     the length of the message.
  1609.  
  1610.     INPUTS
  1611.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  1612.     Attr       - Information Attribute
  1613.       o PPCMSGTAG_DATA
  1614.         returns the Data parameter of the PPC Message.
  1615.         The Data field is most of a time a memory ptr
  1616.         but if the length of the message is 0 it can
  1617.         also be used as an additional msgid.
  1618.       o PPCMSGTAG_DATALENGTH
  1619.            returns the Length of the PPC Message. If the
  1620.         Length is NULL this Message needed no cacheflush
  1621.         and therefore is very fast. If Length is NULL the
  1622.         the Data field can be used as an additional msgid.
  1623.       o PPCMSGTAG_MSGID
  1624.         returns the MSGID of the PPC Message. This may be
  1625.         useful to mark certain msgs to be from a certain
  1626.         type which may simplify the handling of messages.
  1627.  
  1628.     RESULT
  1629.     Result - Returns the informations you requested by the
  1630.              attribute.
  1631.  
  1632.     SEE ALSO
  1633.     PPCGetMessage(), ppclib/message.h
  1634.  
  1635. PowerUPKernel/PPCGetTagData                       PowerUPKernel/PPCGetTagData
  1636.  
  1637.     NAME
  1638.     PPCGetTagData -- Obtain data corresponding to Tag.
  1639.  
  1640.     SYNOPSIS
  1641.     value = PPCGetTagData(tagVal, default, tagList)
  1642.     gpr3              gpr3    gpr4    gpr5
  1643.  
  1644.     ULONG PPCGetTagData(Tag TagVal, ULONG Default, struct TagItem *TagList)
  1645.  
  1646.     FUNCTION
  1647.     Searches a TagItem list for a matching Tag value, and returns the
  1648.     corresponding ti_Data value for the TagItem found.  If none
  1649.     found, will return the value passed it as 'default'.
  1650.  
  1651.     INPUTS
  1652.     tagVal         - Tag value to search for.
  1653.     default        - value to be returned if tagVal is not found.
  1654.     tagList     - the TagItem list to search.
  1655.  
  1656.     RESULT
  1657.     value        - The ti_Data value for first matching TagItem, or
  1658.               'default' if a ti_Tag matching 'Tag' is not found.
  1659.     SEE ALSO
  1660.     utility/tagitem.h, PPCFindTagItem(), PPCNextTagItem()
  1661.  
  1662. PowerUPKernel/PPCGetTaskAttr                     PowerUPKernel/PPCGetTaskAttr
  1663.  
  1664.     NAME
  1665.     PPCGetTaskAttr -- Get PPC Task Attributes
  1666.  
  1667.     SYNOPSIS
  1668.     Result = PPCGetTaskAttr(Tag)
  1669.     gpr3            gpr3
  1670.  
  1671.     ULONG PPCGetTaskAttr(ULONG);
  1672.  
  1673.     FUNCTION
  1674.     Gives you infos about your task. This function isn`t as flexible
  1675.     the AmigaOS PowerUPKernel function. Please check the include which
  1676.     Tag you can use.
  1677.  
  1678.     INPUTS
  1679.     Tag       - the information you want.
  1680.      o PPCTASKTAG_STARTUP_MSG
  1681.        returns the PPCTask`s startup msg. This msg will be replied
  1682.        by the PowerUPKernel after the PPC Task ends so you can use
  1683.        this to know that the PPCTask is gone so a PPCUnloadObject()
  1684.        is save. On the PPC side you can use it as a method to pass
  1685.        data.
  1686.      o PPCTASKTAG_STARTUP_MSGDATA
  1687.        returns the startup`s MsgData. This data field can be used
  1688.        to pass startup data to the PPC. Like some M68k msgport for
  1689.        example.
  1690.      o PPCTASKTAG_STARTUP_MSGLENGTH
  1691.        returns the startup`s MsgLength.
  1692.      o PPCTASKTAG_STARTUP_MSGID
  1693.        returns the startup`s MsgID.
  1694.      o PPCTASKTAG_MSGPORT
  1695.        returns the PPCPort which belongs to the PPCTask. If you
  1696.        haven`t asked for one in PPCCreateTask() the function returns
  1697.        NULL.
  1698.      o PPCTASKTAG_STACKSIZE
  1699.        returns the size of the task`s stack.
  1700.  
  1701.     RESULT
  1702.     result    - depends on the requested Tag
  1703.  
  1704.     SEE ALSO
  1705.     PowerUP/PPCLib/ppc_tasks.h
  1706.  
  1707. PowerUPKernel/PPCInsert                               PowerUPKernel/PPCInsert
  1708.  
  1709.    NAME
  1710.     PPCInsert -- insert a node into a list
  1711.  
  1712.    SYNOPSIS
  1713.     PPCInsert(list, node, listNode)
  1714.               gpr3  gpr4  gpr5
  1715.  
  1716.     void PPCInsert(struct List*, struct Node*, struct Node*);
  1717.  
  1718.    FUNCTION
  1719.     Insert a node into a doubly linked list AFTER a given node
  1720.     position.  Insertion at the head of a list is possible by
  1721.     passing a NULL listNode, though the PPCAddHead() function is
  1722.     slightly faster for that special case.
  1723.  
  1724.    WARNING
  1725.     This function does not arbitrate for access to the list.  The
  1726.     calling task must be the owner of the involved list.
  1727.  
  1728.    INPUTS
  1729.     list - a pointer to the target list header
  1730.     node - the node to insert
  1731.     listNode - the node after which to insert
  1732.  
  1733.    SEE ALSO
  1734.     PPCAddHead(), PPCAddTail(), PPCEnqueue(), PPCRemHead(),
  1735.     PPCRemove(), PPCRemTail()
  1736.  
  1737. PowerUPKernel/PPCInsertSync                       PowerUPKernel/PPCInsertSync
  1738.  
  1739.    NAME
  1740.     PPCInsertSync -- insert a node into a list
  1741.  
  1742.    SYNOPSIS
  1743.     PPCInsertSync(list, node, listNode)
  1744.                   gpr3  gpr4  gpr5
  1745.  
  1746.     void PPCInsertSync(struct List *, struct Node *, struct Node *);
  1747.  
  1748.    FUNCTION
  1749.     Insert a node into a doubly linked list AFTER a given node
  1750.     position.  Insertion at the head of a list is possible by
  1751.     passing a NULL listNode, though the PPCAddHead() function
  1752.     is slightly faster for that special case.
  1753.  
  1754.    INPUTS
  1755.     list - a pointer to the target list header
  1756.     node - the node to insert
  1757.     listNode - the node after which to insert
  1758.  
  1759.    SEE ALSO
  1760.     PPCAddHeadSync(), PPCAddTailSync(), PPCEnqueueSync(),
  1761.     PPCRemHeadSync(), PPCRemoveSync(), PPCRemTailSync()
  1762.  
  1763. PowerUPKernel/PPCMods64                               PowerUPKernel/PPCMods64
  1764.  
  1765.     NAME
  1766.     PPCMods64 -- Modulus 2 signed 64bit integers
  1767.  
  1768.     SYNOPSIS
  1769.     Result = PPCMods64(highA,lowA,highB,lowB )
  1770.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1771.  
  1772.     long    PPCMods64(ULONG,ULONG,ULONG,ULONG);
  1773.  
  1774.     FUNCTION
  1775.     Multiplies 2 signed 64bit integers and
  1776.     returns the 64bit result in A.
  1777.  
  1778.     INPUTS
  1779.     highA         - upper 32bit of value A
  1780.     lowA         - lower 32bit of value A
  1781.     highB         - upper 32bit of value B
  1782.     lowB         - lower 32bit of value B
  1783.  
  1784.     RESULT
  1785.     Result    - 64Bit result devided into 2 registers
  1786.  
  1787.     SEE ALSO
  1788.     PPCMods64p()
  1789.  
  1790. PowerUPKernel/PPCMods64p                             PowerUPKernel/PPCMods64p
  1791.  
  1792.     NAME
  1793.     PPCMods64p -- Modulus 2 signed 64bit integers
  1794.  
  1795.     SYNOPSIS
  1796.     PPCMods64p(ValueAPtr,ValueBPtr)
  1797.                gpr3      gpr4
  1798.  
  1799.     void    PPCMods64p(long long*,long long*);
  1800.  
  1801.     FUNCTION
  1802.     Multiplies 2 signed 64bit integers and
  1803.     returns the 64bit result in A.
  1804.  
  1805.     INPUTS
  1806.     ValueAPtr    - Ptr to 64Bit value A
  1807.     ValueBPtr    - Ptr to 64Bit value B
  1808.  
  1809.     SEE ALSO
  1810.     PPCMods64()
  1811.  
  1812. PowerUPKernel/PPCModu64                               PowerUPKernel/PPCModu64
  1813.  
  1814.     NAME
  1815.     PPCModu64 -- Modulus 2 unsigned 64bit integers
  1816.  
  1817.     SYNOPSIS
  1818.     Result = PPCModu64(highA,lowA,highB,lowB )
  1819.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1820.  
  1821.     long    PPCModu64(ULONG,ULONG,ULONG,ULONG);
  1822.  
  1823.     FUNCTION
  1824.     Multiplies 2 unsigned 64bit integers and
  1825.     returns the 64bit result in A.
  1826.  
  1827.     INPUTS
  1828.     highA         - upper 32bit of value A
  1829.     lowA         - lower 32bit of value A
  1830.     highB         - upper 32bit of value B
  1831.     lowB         - lower 32bit of value B
  1832.  
  1833.     RESULT
  1834.     Result    - 64Bit result devided into 2 registers
  1835.  
  1836.     SEE ALSO
  1837.     PPCModu64p()
  1838.  
  1839. PowerUPKernel/PPCModu64p                             PowerUPKernel/PPCModu64p
  1840.  
  1841.     NAME
  1842.     PPCModu64p -- Modulus 2 unsigned 64bit integers
  1843.  
  1844.     SYNOPSIS
  1845.     PPCModu64p(ValueAPtr,ValueBPtr)
  1846.                gpr3      gpr4
  1847.  
  1848.     void    PPCModu64p(long long*,long long*);
  1849.  
  1850.     FUNCTION
  1851.     Multiplies 2 unsigned 64bit integers and
  1852.     returns the 64bit result in A.
  1853.  
  1854.     INPUTS
  1855.     ValueAPtr    - Ptr to 64Bit value A
  1856.     ValueBPtr    - Ptr to 64Bit value B
  1857.  
  1858.     SEE ALSO
  1859.     PPCModu64()
  1860.  
  1861. PowerUPKernel/PPCMuls64                               PowerUPKernel/PPCMuls64
  1862.  
  1863.     NAME
  1864.     PPCMuls64 -- Multiply 2 signed 64bit integers
  1865.  
  1866.     SYNOPSIS
  1867.     Result = PPCMuls64(highA,lowA,highB,lowB )
  1868.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1869.  
  1870.     long    PPCMuls64(ULONG,ULONG,ULONG,ULONG);
  1871.  
  1872.     FUNCTION
  1873.     Multiplies 2 signed 64bit integers and
  1874.     returns the 64bit result in A.
  1875.  
  1876.     INPUTS
  1877.     highA         - upper 32bit of value A
  1878.     lowA         - lower 32bit of value A
  1879.     highB         - upper 32bit of value B
  1880.     lowB         - lower 32bit of value B
  1881.  
  1882.     RESULT
  1883.     Result    - 64Bit result devided into 2 registers
  1884.  
  1885.     SEE ALSO
  1886.     PPCMuls64p()
  1887.  
  1888. PowerUPKernel/PPCMuls64p                             PowerUPKernel/PPCMuls64p
  1889.  
  1890.     NAME
  1891.     PPCMuls64p -- Multiply 2 signed 64bit integers
  1892.  
  1893.     SYNOPSIS
  1894.     PPCMuls64p(ValueAPtr,ValueBPtr)
  1895.                gpr3      gpr4
  1896.  
  1897.     void    PPCMuls64p(long long*,long long*);
  1898.  
  1899.     FUNCTION
  1900.     Multiplies 2 signed 64bit integers and
  1901.     returns the 64bit result in A.
  1902.  
  1903.     INPUTS
  1904.     ValueAPtr    - Ptr to 64Bit value A
  1905.     ValueBPtr    - Ptr to 64Bit value B
  1906.  
  1907.     SEE ALSO
  1908.     PPCMuls64()
  1909.  
  1910. PowerUPKernel/PPCMulu64                               PowerUPKernel/PPCMulu64
  1911.  
  1912.     NAME
  1913.     PPCMulu64 -- Multiply 2 unsigned 64bit integers
  1914.  
  1915.     SYNOPSIS
  1916.     Result = PPCMulu64(highA,lowA,highB,lowB )
  1917.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1918.  
  1919.     long    PPCMulu64(ULONG,ULONG,ULONG,ULONG);
  1920.  
  1921.     FUNCTION
  1922.     Multiplies 2 unsigned 64bit integers and
  1923.     returns the 64bit result in A.
  1924.  
  1925.     INPUTS
  1926.     highA         - upper 32bit of value A
  1927.     lowA         - lower 32bit of value A
  1928.     highB         - upper 32bit of value B
  1929.     lowB         - lower 32bit of value B
  1930.  
  1931.     RESULT
  1932.     Result    - 64Bit result devided into 2 registers
  1933.  
  1934.     SEE ALSO
  1935.     PPCMulu64p()
  1936.  
  1937. PowerUPKernel/PPCMulu64p                             PowerUPKernel/PPCMulu64p
  1938.  
  1939.     NAME
  1940.     PPCMulu64p -- Multiply 2 unsigned 64bit integers
  1941.  
  1942.     SYNOPSIS
  1943.     PPCMulu64p(ValueAPtr,ValueBPtr)
  1944.                gpr3      gpr4
  1945.  
  1946.     void    PPCMulu64p(long long*,long long*);
  1947.  
  1948.     FUNCTION
  1949.     Multiplies 2 unsigned 64bit integers and
  1950.     returns the 64bit result in A.
  1951.  
  1952.     INPUTS
  1953.     ValueAPtr    - Ptr to 64Bit value A
  1954.     ValueBPtr    - Ptr to 64Bit value B
  1955.  
  1956.     SEE ALSO
  1957.     PPCMulu64()
  1958.  
  1959. PowerUPKernel/PPCNeg64                                 PowerUPKernel/PPCNeg64
  1960.  
  1961.     NAME
  1962.     PPCNeg64 -- Negate a 64bit integer
  1963.  
  1964.     SYNOPSIS
  1965.     Result = PPCNeg64(highA,lowA)
  1966.     gpr3:gpr4         gpr3  gpr4
  1967.  
  1968.     long    PPCNeg64(ULONG,ULONG);
  1969.  
  1970.     FUNCTION
  1971.     Negates a 64bit integers and returns the 64bit result in 2
  1972.     32bit registers.
  1973.  
  1974.     INPUTS
  1975.     highA         - upper 32bit of value A
  1976.     lowA         - lower 32bit of value A
  1977.  
  1978.     RESULT
  1979.     Result    - 64Bit result devided into 2 registers
  1980.  
  1981.     SEE ALSO
  1982.     PPCNeg64p()
  1983.  
  1984. PowerUPKernel/PPCNeg64p                               PowerUPKernel/PPCNeg64p
  1985.  
  1986.     NAME
  1987.     PPCNeg64p -- Negate a 64bit integer
  1988.  
  1989.     SYNOPSIS
  1990.     PPCNeg64p(ValueAPtr)
  1991.               gpr3
  1992.  
  1993.     void    PPCNeg64p(long long*);
  1994.  
  1995.     FUNCTION
  1996.     Negates a 64bit integer and returns the 64bit result in
  1997.     A.
  1998.  
  1999.     INPUTS
  2000.     ValueAPtr    - Ptr to 64Bit value A
  2001.  
  2002.     SEE ALSO
  2003.     PPCNeg64()
  2004.  
  2005. PowerUPKernel/PPCNewList                             PowerUPKernel/PPCNewList
  2006.  
  2007.    NAME
  2008.     PPCNewList - Initialize a list (minlist) header...
  2009.  
  2010.    SYNOPSIS
  2011.     PPCNewList(list)
  2012.                gpr3
  2013.  
  2014.     VOID PPCNewList(struct List *);
  2015.     VOID PPCNewList(struct MinList *);
  2016.  
  2017.    FUNCTION
  2018.     Initializes a List so it can be used by list operations.
  2019.  
  2020.    INPUTS
  2021.     list - pointer to a List or MinList.
  2022.  
  2023.    SEE ALSO
  2024.     <exec/lists.h>
  2025.  
  2026. PowerUPKernel/PPCNextTagItem                     PowerUPKernel/PPCNextTagItem
  2027.  
  2028.     NAME
  2029.     PPCNextTagItem -- Iterate TagItem lists.
  2030.  
  2031.     SYNOPSIS
  2032.     next_tag = PPCNextTagItem(tagItemPtr )
  2033.     D0              gpr3
  2034.  
  2035.     struct TagItem *PPCNextTagItem(struct TagItem **tagItemPtr);
  2036.  
  2037.     FUNCTION
  2038.     Iterates through a (chained) array of TagItem structures,
  2039.     skipping and chaining as dictated by system tags.  TAG_SKIP
  2040.     will cause it to skip the entry and the next, TAG_IGNORE ignores
  2041.     that single entry, and TAG_MORE has a pointer to another array
  2042.     of tags (and terminates the current array!)  TAG_DONE also
  2043.     terminates the current array.  Each call returns either the next
  2044.     tagitem you should examine, or NULL at the end.
  2045.  
  2046.     INPUTS
  2047.     tagItemPtr     - doubly-indirect reference to a TagItem structure.
  2048.               The pointer will be changed to keep track of the
  2049.               iteration.
  2050.  
  2051.     RESULT
  2052.     next_tag    - Each TagItem in the array or chain of arrays that
  2053.               should be processed according to system Tag values
  2054.               (in utility/tagitem.h) is returned in turn with
  2055.               successive calls.
  2056.  
  2057.     EXAMPLE
  2058.     Iterate( struct TagItem *tags );
  2059.     {
  2060.         struct TagItem *tstate;
  2061.         struct TagItem *tag;
  2062.  
  2063.         tstate = tags;
  2064.         while ( tag = NextTagItem( &tstate ) )
  2065.         {
  2066.             switch ( tag->ti_Tag )
  2067.             {
  2068.              case TAG1:
  2069.                 ...
  2070.                 break;
  2071.              case TAG2:
  2072.                 ...
  2073.                 break;
  2074.             ...
  2075.             }
  2076.         }
  2077.        }
  2078.  
  2079.     NOTES
  2080.     Do NOT use the value of *tagItemPtr, but rather use the pointer
  2081.     returned by PPCNextTagItem().
  2082.  
  2083.  
  2084.     SEE ALSO
  2085.     utility/tagitem.h, PPCGetTagData(), PPCFindTagItem()
  2086.  
  2087. PowerUPKernel/PPCObtainPort                       PowerUPKernel/PPCObtainPort
  2088.  
  2089.     NAME
  2090.     PPCObtainPort -- Obtain a PPC Message Port
  2091.  
  2092.     SYNOPSIS
  2093.     Port = PPCObtainPort(Tags)
  2094.     gpr3                 gpr3
  2095.  
  2096.     void* PPCObtainPort(struct TagItem*);
  2097.  
  2098.     FUNCTION
  2099.     searches a public PPC MsgPort on the local processor or
  2100.     all processor. A search on the network may also be possible
  2101.     in the future.
  2102.  
  2103.     INPUTS
  2104.     Tags        - Tags to specify a public port for example.
  2105.       o PPCPORTTAG_NAME,"Name"
  2106.         defines the name of the PPC port you want to obtain
  2107.  
  2108.       o PPCPORTTAG_ERROR,(ULONG*) ErrorPtr
  2109.         defines the ptr for a more precise return error result
  2110.  
  2111.     RESULT
  2112.     PPCPort    - PPCPort object generated by PPCCreatePort
  2113.  
  2114.     SEE ALSO
  2115.     PPCReleasePort(), ppclib/message.h
  2116.  
  2117. PowerUPKernel/PPCObtainSemaphore             PowerUPKernel/PPCObtainSemaphore
  2118.  
  2119.    NAME
  2120.     PPCObtainSemaphore -- gain exclusive access to a semaphore
  2121.  
  2122.    SYNOPSIS
  2123.     PPCObtainSemaphore(Semaphore)
  2124.                gpr3
  2125.  
  2126.     void ObtainSemaphore(void*);
  2127.  
  2128.    FUNCTION
  2129.     Semaphores are used to gain exclusive access to an object.
  2130.     PPCObtainSemaphore is the call used to gain this access.  If another
  2131.     user currently has the semaphore locked the call will block until
  2132.     the object is available.
  2133.  
  2134.     If the current PPC task already has locked the semaphore and attempts to
  2135.     lock it again the call will still succeed.  A "nesting count" is
  2136.     incremented each time the current owning task of the semaphore calls
  2137.     PPCObtainSemaphore().  This counter is decremented each time
  2138.     PPCReleaseSemaphore() is called.  When the counter returns to zero the
  2139.     semaphore is actually released, and the next waiting task is called.
  2140.  
  2141.     A queue of waiting tasks is maintained on the stacks of the waiting
  2142.     tasks.    Each will be called in turn as soon as the current task
  2143.     releases the semaphore.
  2144.  
  2145.    INPUT
  2146.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  2147.  
  2148.    SEE ALSO
  2149.     PPCObtainSemaphoreShared(), PPCObtainSemaphoreByName(),
  2150.     PPCReleaseSemaphore(), PPCAttemptSemaphore(),
  2151.     PPCAttemptSemaphoreByName()
  2152.  
  2153. PowerUPKernel/PPCObtainSemaphoreByName PowerUPKernel/PPCObtainSemaphoreByName
  2154.  
  2155.    NAME
  2156.     PPCObtainSemaphoreByName - Obtain a public Semaphore
  2157.  
  2158.    SYNOPSIS
  2159.     Semaphore = PPCObtainSemaphoreByName(Name)
  2160.     gpr3                                 gpr3
  2161.  
  2162.     void* PPCObtainSemaphoreByName(char *)
  2163.  
  2164.    FUNCTION
  2165.     Tries to find a Semaphore and obtains it.
  2166.     No Arbitration needed.
  2167.  
  2168.    INPUTS
  2169.     Name - Ptr to the name cstring
  2170.  
  2171.    RESULTS
  2172.     Semaphore - If NULL no Semaphore with that name was found
  2173.  
  2174.    SEE ALSO
  2175.     PPCAttemptSemaphoreByName()
  2176.  
  2177. PowerUPKernel/PPCObtainSemaphoreShared PowerUPKernel/PPCObtainSemaphoreShared
  2178.  
  2179.     NAME
  2180.     PPCObtainSemaphoreShared -- gain shared access to a semaphore
  2181.  
  2182.     SYNOPSIS
  2183.     PPCObtainSemaphoreShared(Semaphore)
  2184.                           gpr3
  2185.  
  2186.     void PPCObtainSemaphoreShared(void*);
  2187.  
  2188.     FUNCTION
  2189.     A lock on a semaphore may either be exclusive, or shared.
  2190.     Exclusive locks are granted by the ObtainSemaphore() and
  2191.     PPCAttemptSemaphore() functions.  Shared locks are granted by
  2192.     PPCObtainSemaphoreShared().  Calls may be nested.
  2193.  
  2194.     Any number of tasks may simultaneously hold a shared lock on a
  2195.     semaphore.  Only one task may hold an exclusive lock.  A typical
  2196.     application is a list that is often read, but only occasionally
  2197.     written to.
  2198.  
  2199.     Any exlusive locker will be held off until all shared lockers
  2200.     release the semaphore.  Likewise, if an exlusive lock is held,
  2201.     all potential shared lockers will block until the exclusive lock
  2202.     is released.  All shared lockers are restarted at the same time.
  2203.  
  2204.     EXAMPLE
  2205.         ObtainSemaphoreShared(ss);
  2206.         // read data
  2207.         ReleaseSemaohore(ss);
  2208.  
  2209.         ObtainSemaphore(ss);
  2210.         // modify data
  2211.         ReleaseSemaohore(ss);
  2212.  
  2213.     INPUT
  2214.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  2215.  
  2216.     SEE ALSO
  2217.     PPCObtainSemaphore(), PPCObtainSemaphoreByName(),
  2218.     PPCReleaseSemaphore(), PPCAttemptSemaphore(),
  2219.     PPCAttemptSemaphoreByName()
  2220.  
  2221. PowerUPKernel/PPCObtainSemaphoreSharedByNameel/PPCObtainSemaphoreSharedByName
  2222.  
  2223.    NAME
  2224.     PPCObtainSemaphoreSharedByName - Obtain a public Semaphore shared
  2225.  
  2226.    SYNOPSIS
  2227.     Semaphore = PPCObtainSemaphoreSharedByName(Name)
  2228.     gpr3                                       gpr3
  2229.  
  2230.     void* PPCObtainSemaphoreSharedByName(char *)
  2231.  
  2232.    FUNCTION
  2233.     Tries to find a Semaphore and obtains it without blocking.
  2234.     No Arbitration needed.
  2235.  
  2236.    INPUTS
  2237.     Name - Ptr to the name cstring
  2238.  
  2239.    RESULTS
  2240.     Semaphore - If NULL no Semaphore with that name was found
  2241.  
  2242.    SEE ALSO
  2243.     PPCObtainSemaphoreShared(), PPCAttemptSemaphoreSharedByName()
  2244.  
  2245. PowerUPKernel/PPCOpen                                   PowerUPKernel/PPCOpen
  2246.  
  2247.     NAME
  2248.     PPCOpen -- Open a file for input or output
  2249.  
  2250.     SYNOPSIS
  2251.     file = PPCOpen( name, accessMode )
  2252.     gpr3            gpr3    gpr4
  2253.  
  2254.     BPTR PPCOpen(STRPTR, LONG)
  2255.  
  2256.     FUNCTION
  2257.     This function is equal to the dos.library/Open function.
  2258.     It works on the context of the Msg Task each PPC Task has
  2259.     on the AmigaOS side.
  2260.  
  2261.     INPUTS
  2262.     name       - pointer to a null-terminated string
  2263.     accessMode - integer
  2264.  
  2265.     RESULTS
  2266.     file - BCPL pointer to a file handle
  2267.  
  2268.     SEE ALSO
  2269.     PPCClose(), PPCRead(), PPCWrite(), PPCSeek()
  2270.  
  2271. PowerUPKernel/PPCRawDoFmt                           PowerUPKernel/PPCRawDoFmt
  2272.  
  2273.    NAME
  2274.     RawDoFmt -- format data into a character stream.
  2275.  
  2276.    SYNOPSIS
  2277.     NextData = PPCRawDoFmt(FormatString, DataStream, PutChProc, PutChData);
  2278.        gpr3                   gpr3          gpr4        gpr4       gpr5
  2279.  
  2280.     APTR PPCRawDoFmt(STRPTR,APTR,void (*)(),APTR);
  2281.  
  2282.    FUNCTION
  2283.     perform "C"-language-like formatting of a data stream, outputting
  2284.     the result a character at a time.  Where % formatting commands are
  2285.     found in the FormatString, they will be replaced with the
  2286.     corresponding element in the DataStream.  %% must be used in the
  2287.     string if a % is desired in the output.
  2288.  
  2289.     Under V36, RawDoFmt() returns a pointer to the end of the DataStream
  2290.     (The next argument that would have been processed).  This allows
  2291.     multiple formatting passes to be made using the same data.
  2292.  
  2293.    INPUTS
  2294.     FormatString - a "C"-language-like NULL terminated format string,
  2295.     with the following supported % options:
  2296.  
  2297.      %[flags][width.limit][length]type
  2298.  
  2299.     flags  - only one allowed. '-' specifies left justification.
  2300.     width  - field width.  If the first character is a '0', the
  2301.          field will be padded with leading 0's.
  2302.       .    - must follow the field width, if specified
  2303.     limit  - maximum number of characters to output from a string.
  2304.          (only valid for %s).
  2305.     length - size of input data defaults to WORD for types d, x,
  2306.          and c, 'l' changes this to long (32-bit).
  2307.     type   - supported types are:
  2308.             b - BSTR, data is 32-bit BPTR to byte count followed
  2309.                 by a byte string, or NULL terminated byte string.
  2310.                 A NULL BPTR is treated as an empty string.
  2311.                 (Added in V36 exec)
  2312.             d - decimal
  2313.             u - unsigned decimal (Added in V37 exec)
  2314.             x - hexadecimal
  2315.             s - string, a 32-bit pointer to a NULL terminated
  2316.                 byte string.  In V36, a NULL pointer is treated
  2317.                 as an empty string
  2318.             c - character
  2319.  
  2320.     DataStream - a stream of data that is interpreted according to
  2321.          the format string.  Often this is a pointer into
  2322.          the task's stack.
  2323.     PutChProc  - the procedure to call with each character to be
  2324.          output, called as:
  2325.  
  2326.     PutChProc(Char,  PutChData);
  2327.           gpr3   gpr4
  2328.  
  2329.         the procedure is called with a NULL Char at the end of
  2330.         the format string.
  2331.  
  2332.         IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT!
  2333.  
  2334.         If PutChProc is == 0 it writes the character into the Buffer.
  2335.         The buffer is the address PutChData points too.
  2336.         If PutChProc is == 1 it writes the character to the serial line.
  2337.  
  2338.  
  2339.     PutChData - a value that is passed through to the PutChProc
  2340.         procedure.  This is untouched by RawDoFmt, and may be
  2341.         modified by the PutChProc.
  2342.  
  2343.    WARNING
  2344.     This Amiga ROM function formats word values in the data stream.  If
  2345.     your compiler defaults to longs, you must add an "l" to your
  2346.     % specifications.  This can get strange for characters, which might
  2347.     look like "%lc".
  2348.  
  2349.    SEE ALSO
  2350.     Documentation on the C language "printf" call in any C language
  2351.     reference book.
  2352.  
  2353. PowerUPKernel/PPCRead                                   PowerUPKernel/PPCRead
  2354.  
  2355.     NAME
  2356.     PPCRead -- Read bytes of data from a file
  2357.  
  2358.     SYNOPSIS
  2359.     actualLength = PPCRead( file, buffer, length )
  2360.     gpr3                    gpr3  gpr4    gpr5
  2361.  
  2362.     LONG PPCRead(BPTR, void *, LONG)
  2363.  
  2364.     FUNCTION
  2365.     This function is equal to the dos.library/Read function.
  2366.     It works on the context of the Msg Task each PPC Task has
  2367.     on the AmigaOS side.
  2368.  
  2369.     ATTENTION
  2370.     You must use PPCAllocMem() for the buffer, so it`s aligned
  2371.     to the PPC cache lines.
  2372.  
  2373.     INPUTS
  2374.     file - BCPL pointer to a file handle
  2375.     buffer - pointer to buffer
  2376.     length - integer
  2377.  
  2378.     RESULTS
  2379.     actualLength - integer
  2380.  
  2381.     SEE ALSO
  2382.     PPCOpen(), PPCClose(), PPCWrite(), PPCSeek()
  2383.  
  2384. PowerUPKernel/PPCReleasePort                     PowerUPKernel/PPCReleasePort
  2385.  
  2386.     NAME
  2387.     PPCReleasePort -- Releases an obtained PPC Message Port
  2388.  
  2389.     SYNOPSIS
  2390.     Success = PPCReleasePort(PPCPort)
  2391.     gpr3                     gpr3
  2392.  
  2393.     void PPCReleasePort(void*);
  2394.  
  2395.     FUNCTION
  2396.     Releases a PPC MsgPort, so it may be removed after nobody
  2397.     needs it anymore.
  2398.  
  2399.     INPUTS
  2400.     PPCPort    - Ptr to an object generated by PPCCreatePort
  2401.  
  2402.     RESULT
  2403.     Success - Boolean which says if the PPCPort could be released
  2404.               successfully. If this fails the PPCPort is still obtained
  2405.               by somebody else.
  2406.     SEE ALSO
  2407.     PPCObtainPort(), ppclib/message.h
  2408.  
  2409. PowerUPKernel/PPCReleaseSemaphore           PowerUPKernel/PPCReleaseSemaphore
  2410.  
  2411.    NAME
  2412.     PPCReleaseSemaphore -- make semaphore available to others
  2413.  
  2414.    SYNOPSIS
  2415.     PPCReleaseSemaphore(Semaphore)
  2416.                     gpr3
  2417.  
  2418.     void PPCReleaseSemaphore(void*);
  2419.  
  2420.    FUNCTION
  2421.     PPCReleaseSemaphore() is the inverse of PPCObtainSemaphore(). It makes
  2422.     the semaphore lockable to other users.    If tasks are waiting for
  2423.     the semaphore and this this task is done with the semaphore then
  2424.     the next waiting task is signalled.
  2425.  
  2426.     Each PPCObtainSemaphore() call must be balanced by exactly one
  2427.     PPCReleaseSemaphore() call.  This is because there is a nesting count
  2428.     maintained in the semaphore of the number of times that the current
  2429.     task has locked the semaphore. The semaphore is not released to
  2430.     other PPC tasks until the number of releases matches the number of
  2431.     obtains.
  2432.  
  2433.     Needless to say, havoc breaks out if the task releases more times
  2434.     than it has obtained.
  2435.  
  2436.    INPUT
  2437.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  2438.  
  2439.    SEE ALSO
  2440.     PPCObtainSemaphore(), PPCObtainSemaphoreShared()
  2441.  
  2442. PowerUPKernel/PPCRemHead                             PowerUPKernel/PPCRemHead
  2443.  
  2444.    NAME
  2445.     PPCRemHead -- remove the head node from a list
  2446.  
  2447.    SYNOPSIS
  2448.     node = PPCRemHead(list)
  2449.     gpr3               gpr3
  2450.  
  2451.     struct Node *PPCRemHead(struct List *);
  2452.  
  2453.    FUNCTION
  2454.     Get a pointer to the head node and remove it from the list.
  2455.  
  2456.    WARNING
  2457.     This function does not arbitrate for access to the list.  The
  2458.     calling task must be the owner of the involved list.
  2459.  
  2460.    INPUTS
  2461.     list - a pointer to the target list header
  2462.  
  2463.    RESULT
  2464.     node - the node removed or NULL when empty list
  2465.  
  2466.    SEE ALSO
  2467.     PPCAddHead(), PPCAddTail(), PPCEnqueue(), PPCInsert(),
  2468.     PPCRemove(), PPCRemTail()
  2469.  
  2470. PowerUPKernel/PPCRemHeadSync                     PowerUPKernel/PPCRemHeadSync
  2471.  
  2472.    NAME
  2473.     PPCRemHeadSync -- remove the head node from a list
  2474.  
  2475.    SYNOPSIS
  2476.     node = PPCRemHeadSync(list)
  2477.     gpr3                   gpr3
  2478.  
  2479.     struct Node *PPCRemHead(struct List *);
  2480.  
  2481.    FUNCTION
  2482.     Get a pointer to the head node and remove it from the list.
  2483.  
  2484.    INPUTS
  2485.     list - a pointer to the target list header
  2486.  
  2487.    RESULT
  2488.     node - the node removed or zero when empty list
  2489.  
  2490.    SEE ALSO
  2491.     PPCAddHeadSync(), PPCAddTailSync(), PPCEnqueueSync(),
  2492.     PPCInsertSync(), PPCRemoveSync(), PPCRemTailSync()
  2493.  
  2494. PowerUPKernel/PPCRemove                               PowerUPKernel/PPCRemove
  2495.  
  2496.    NAME
  2497.     PPCRemove -- remove a node from a list
  2498.  
  2499.    SYNOPSIS
  2500.     PPCRemove(node)
  2501.               gpr3
  2502.  
  2503.     void PPCRemove(struct Node *);
  2504.  
  2505.    FUNCTION
  2506.     Unlink a node from whatever list it is in.
  2507.     Nodes that are not part    of a list must not
  2508.     be passed to this function!
  2509.  
  2510.    WARNING
  2511.     This function does not arbitrate for access to the list.  The
  2512.     calling task must be the owner of the involved list.
  2513.  
  2514.    INPUTS
  2515.     node - the node to remove
  2516.  
  2517.    SEE ALSO
  2518.     PPCAddHead(), PPCAddTail(), PPCEnqueue(), PPCInsert(),
  2519.     PPCRemHead(), PPCRemTail()
  2520.  
  2521. PowerUPKernel/PPCRemoveSync                       PowerUPKernel/PPCRemoveSync
  2522.  
  2523.    NAME
  2524.     PPCRemoveSync -- remove a node from a list
  2525.  
  2526.    SYNOPSIS
  2527.     PPCRemoveSync(node)
  2528.                   gpr3
  2529.  
  2530.     void PPCRemoveSync(struct Node *);
  2531.  
  2532.    FUNCTION
  2533.     Unlink a node from whatever list it is in.  Nodes
  2534.     that are not part of a list must not be passed to
  2535.     this function!
  2536.  
  2537.    INPUTS
  2538.     node - the node to remove
  2539.  
  2540.    SEE ALSO
  2541.     PPCAddHeadSync(), PPCAddTailSync(), PPCEnqueueSync(),
  2542.     PPCInsertSync(), PPCRemHeadSync(), PPCRemTailSync()
  2543.  
  2544. PowerUPKernel/PPCRemTail                             PowerUPKernel/PPCRemTail
  2545.  
  2546.    NAME
  2547.     PPCRemTail -- remove the tail node from a list
  2548.  
  2549.    SYNOPSIS
  2550.     node = PPCRemTail(list)
  2551.     gpr3               gpr3
  2552.  
  2553.     struct Node *PPCRemTail(struct List *);
  2554.  
  2555.    FUNCTION
  2556.     Remove the last node from a list, and return a pointer to it.
  2557.     If the list is empty, return NULL.
  2558.  
  2559.    WARNING
  2560.     This function does not arbitrate for access to the list.  The
  2561.     calling task must be the owner of the involved list.
  2562.  
  2563.    INPUTS
  2564.     list - a pointer to the target list header
  2565.  
  2566.    RESULT
  2567.     node - the node removed or NULL when empty list
  2568.  
  2569.    SEE ALSO
  2570.     PPCAddHead(), PPCAddTail(), PPCEnqueue(), PPCInsert(),
  2571.     PPCRemove(), PPCRemHead(), PPCRemTail()
  2572.  
  2573. PowerUPKernel/PPCRemTailSync                     PowerUPKernel/PPCRemTailSync
  2574.  
  2575.    NAME
  2576.     PPCRemTailSync -- remove the tail node from a list
  2577.  
  2578.    SYNOPSIS
  2579.     node = PPCRemTailSync(list)
  2580.     gpr3                   gpr3
  2581.  
  2582.     struct Node *PPCRemTailSync(struct List *);
  2583.  
  2584.    FUNCTION
  2585.     Remove the last node from a list, and return a pointer to it.
  2586.     If the list is empty, return NULL.
  2587.  
  2588.    INPUTS
  2589.     list - a pointer to the target list header
  2590.  
  2591.    RESULT
  2592.     node - the node removed or zero when empty list
  2593.  
  2594.    SEE ALSO
  2595.     PPCAddHeadSync(), PPCAddTailSync(), PPCEnqueueSync(),
  2596.     PPCInsertSync(), PPCRemoveSync(), PPCRemHeadSync(),
  2597.     PPCRemTailSync()
  2598.  
  2599. PowerUPKernel/PPCReplyMessage                   PowerUPKernel/PPCReplyMessage
  2600.  
  2601.     NAME
  2602.     PPCReplyMessage -- Reply a PPC Message
  2603.  
  2604.     SYNOPSIS
  2605.     Success = PPCReplyMessage(PPCMessage)
  2606.                               gpr3
  2607.  
  2608.     BOOL PPCReplyMessage(void*);
  2609.  
  2610.     FUNCTION
  2611.     Reply a PPC Message. After this operation the embedded Data 
  2612.     informations in the PPC Message isn`t valid anymore. The Message
  2613.     itself is also not valid anymore so any access to the object is
  2614.     not allowed.
  2615.  
  2616.     INPUTS
  2617.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  2618.  
  2619.     RESULT
  2620.     Success - A Boolean tells you if the operation was successful.
  2621.  
  2622.     SEE ALSO
  2623.     PPCGetMessage(), ppclib/message.h
  2624.  
  2625. PowerUPKernel/PPCRevision                           PowerUPKernel/PPCRevision
  2626.  
  2627.     NAME
  2628.     PPCRevision -- Get Revision of the PowerUPKernel
  2629.  
  2630.     SYNOPSIS
  2631.     Revision = PPCRevision()
  2632.     gpr3
  2633.  
  2634.     ULONG PPCVersion()
  2635.  
  2636.     FUNCTION
  2637.     Returns the Revision of the PowerUPKernel, so software
  2638.     is able to adapt to future changes.
  2639.  
  2640.     RESULT
  2641.     value        - The Revision number of the PowerUPKernel
  2642.  
  2643. PowerUPKernel/PPCSeek                                   PowerUPKernel/PPCSeek
  2644.  
  2645.     NAME
  2646.     PPCSeek -- Set the current position for reading and writing
  2647.  
  2648.     SYNOPSIS
  2649.     oldPosition = PPCSeek( file, position, mode )
  2650.     gpr3                   gpr3  gpr4      gpr5
  2651.  
  2652.     LONG PPCSeek(BPTR, LONG, LONG)
  2653.  
  2654.     FUNCTION
  2655.     This function is equal to the dos.library/Seek function.
  2656.     It works on the context of the Msg Task each PPC Task has
  2657.     on the AmigaOS side.
  2658.  
  2659.     INPUTS
  2660.     file - BCPL pointer to a file handle
  2661.     position - integer
  2662.     mode - integer
  2663.  
  2664.     RESULTS
  2665.     oldPosition - integer
  2666.  
  2667.     SEE ALSO
  2668.     PPCOpen(), PPCClose(), PPCWrite(), PPCRead()
  2669.  
  2670. PowerUPKernel/PPCSendMessage                     PowerUPKernel/PPCSendMessage
  2671.  
  2672.     NAME
  2673.     PPCSendMessage -- Sends a PPC Message to a PPC Port
  2674.  
  2675.     SYNOPSIS
  2676.     Success = PPCSendMessage(PPCPort,PPCMessage,Data,Length,MsgID)
  2677.     gpr3                     gpr3    gpr4       gpr5 gpr6   gpr7
  2678.  
  2679.     BOOL PPCSendMessage(void*,void*,void*,ULONG,ULONG);
  2680.  
  2681.     FUNCTION
  2682.     Sends a PPC Message to a PPC Port which may be controlled
  2683.     by the M68k oder PPC. This way you can pass data between
  2684.     the PPC and the M68k in an abstract way which will be source
  2685.     compatible on the A\BOX OS. After you`ve sent a message
  2686.     you MUST NOT change the Data until your task received a reply.
  2687.     If you only want to send a quick 32Bit Msg to the target task
  2688.     use Data as a 32bit Msg value and Length=0.
  2689.     This way no Cache is flushed.
  2690.  
  2691.     INPUTS
  2692.     PPCPort    - Ptr to an object generated by PPCCreatePort
  2693.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  2694.     Data       - Ptr to the Data you wanna send or additional MsgID
  2695.                  if the Length field is 0.
  2696.     Length     - Length of the Data you wanna send.
  2697.     MsgID      - MsgID code you may use for your msg type detection
  2698.  
  2699.     RESULT
  2700.     Success - A Boolean tells you if the operation was successful.
  2701.  
  2702.     SEE ALSO
  2703.     PPCReplyMessage(), ppclib/message.h
  2704.  
  2705. PowerUPKernel/PPCSetSignal                         PowerUPKernel/PPCSetSignal
  2706.  
  2707.    NAME
  2708.     PPCSetSignal -- define the state of this ppctask's signals
  2709.  
  2710.    SYNOPSIS
  2711.     oldSignals = PPCSetSignal(newSignals, signalMask)
  2712.     gpr3                      gpr3        gpr4
  2713.  
  2714.     ULONG PPCSetSignal(ULONG, ULONG)
  2715.  
  2716.    FUNCTION
  2717.     This function defines the states of the ppctask's signalmask.
  2718.     This way you can check for break signals easily.
  2719.  
  2720.    INPUTS
  2721.     newSignals - the new values for the signals specified in
  2722.                  signalSet.
  2723.     signalMask - the set of signals to be effected
  2724.  
  2725.    RESULTS
  2726.     oldSignals - the prior values for all signals
  2727.  
  2728.    EXAMPLE
  2729.     Get the current state of all signals:
  2730.         PPCSetSignal(0,0)
  2731.     Clear all signals:
  2732.         PPCSetSignal(0,FFFFFFFFH)
  2733.  
  2734.    SEE ALSO
  2735.     PPCSignal(), PPCWait()
  2736.  
  2737. PowerUPKernel/PPCSignal                               PowerUPKernel/PPCSignal
  2738.  
  2739.    NAME
  2740.     PPCSignal -- signal a PPC task
  2741.  
  2742.    SYNOPSIS
  2743.     PPCSignal(PPCTask, signals)
  2744.               gpr3     gpr4
  2745.  
  2746.     void PPCSignal(void*,ULONG);
  2747.  
  2748.    FUNCTION
  2749.     This function signals a PPC task with the given signals.
  2750.     If the task is currently waiting for one or more of these
  2751.     signals, it will be made ready and a reschedule will occur.
  2752.     If the task is not waiting for any of these signals, the
  2753.     signals will be posted to the task for possible later use.
  2754.     A signal may be sent to a task regardless of whether it is
  2755.     running, ready, or waiting.
  2756.  
  2757.     This function is considered "low level".  Its main purpose
  2758.     is to support multiple higher level functions like PPCSendMessage.
  2759.  
  2760.    INPUT
  2761.     task - the task to be signalled
  2762.     signals - the signals to be sent
  2763.  
  2764.    SEE ALSO
  2765.     PPCWait(), PPCSetSignal(), PPCSendMessage()
  2766.  
  2767. PowerUPKernel/PPCSub64                                 PowerUPKernel/PPCSub64
  2768.  
  2769.     NAME
  2770.     PPCSub64 -- Sub 2 64bit integers
  2771.  
  2772.     SYNOPSIS
  2773.     Result = PPCSub64(highA,lowA,highB,lowB )
  2774.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  2775.  
  2776.     long    PPCSub64(ULONG,ULONG,ULONG,ULONG);
  2777.  
  2778.     FUNCTION
  2779.     Subtracts 2 64bit integers and returns the 64bit result in 2
  2780.     32bit registers.
  2781.  
  2782.     INPUTS
  2783.     highA         - upper 32bit of value A
  2784.     lowA         - lower 32bit of value A
  2785.     highB         - upper 32bit of value B
  2786.     lowB         - lower 32bit of value B
  2787.  
  2788.     RESULT
  2789.     Result    - 64Bit result devided into 2 registers
  2790.  
  2791.     SEE ALSO
  2792.     PPCSub64p()
  2793.  
  2794. PowerUPKernel/PPCSub64p                               PowerUPKernel/PPCSub64p
  2795.  
  2796.     NAME
  2797.     PPCSub64p -- Sub 2 64bit integers
  2798.  
  2799.     SYNOPSIS
  2800.     PPCSub64p(ValueAPtr,ValueBPtr)
  2801.               gpr3      gpr4
  2802.  
  2803.     void    PPCSub64p(long long*,long long*);
  2804.  
  2805.     FUNCTION
  2806.     Subtracts 2 64bit integers and returns the 64bit result in
  2807.     A.
  2808.  
  2809.     INPUTS
  2810.     ValueAPtr    - Ptr to 64Bit value A
  2811.     ValueBPtr    - Ptr to 64Bit value B
  2812.  
  2813.     SEE ALSO
  2814.     PPCSub64()
  2815.  
  2816. PowerUPKernel/PPCVersion                             PowerUPKernel/PPCVersion
  2817.  
  2818.     NAME
  2819.     PPCVersion -- Get Version of the PowerUPKernel
  2820.  
  2821.     SYNOPSIS
  2822.     Version = PPCVersion()
  2823.     gpr3
  2824.  
  2825.     ULONG PPCVersion()
  2826.  
  2827.     FUNCTION
  2828.     Returns the Version of the PowerUPKernel, so software
  2829.     is able to adapt to future changes.
  2830.  
  2831.     RESULT
  2832.     value        - The version number of the PowerUPKernel
  2833.  
  2834.  
  2835. PowerUPKernel/PPCWait                                   PowerUPKernel/PPCWait
  2836.  
  2837.    NAME
  2838.     PPCWait -- wait for one or more signals
  2839.  
  2840.    SYNOPSIS
  2841.     signals = PPCWait(signalSet)
  2842.     gpr3              gpr3
  2843.  
  2844.     ULONG PPCWait(ULONG);
  2845.  
  2846.    FUNCTION
  2847.     This function will cause the current PPC task to suspend
  2848.     waiting for one or more signals.
  2849.     When one or more of the specified signals are received,
  2850.     the task will return to the ready state, and those signals
  2851.     will be cleared.
  2852.  
  2853.     If a signal occurred prior to calling PPCWait(), the wait
  2854.     condition will be immediately satisfied, and the task will
  2855.     continue to run without any delay.
  2856.  
  2857.  
  2858.    INPUT
  2859.     signalSet - The set of signals for which to wait.
  2860.             Each bit represents a particular signal.
  2861.  
  2862.    RESULTS
  2863.     signals - the set of signals that were active
  2864.  
  2865.    SEE ALSO
  2866.     PPCSignal(), PPCSetSignal()
  2867.  
  2868. PowerUPKernel/PPCWaitPort                           PowerUPKernel/PPCWaitPort
  2869.  
  2870.    NAME
  2871.     PPCWaitPort -- wait for a given PPC Msgport to be non-empty
  2872.  
  2873.    SYNOPSIS
  2874.     PPCMessage = PPCWaitPort(PPCPort)
  2875.     gpr3                 gpr3
  2876.  
  2877.     void*    PPCWaitPort(void*);
  2878.  
  2879.    FUNCTION
  2880.     This function waits for the given PPC Msgport to become non-empty.
  2881.     If necessary, the Wait function will be called to wait for
  2882.     the port signal.  If a message is already present at the
  2883.     port, this function will return immediately.  The return
  2884.     value is always a pointer to the first PPC Message queued (but
  2885.     it is not removed from the queue.
  2886.  
  2887.    INPUT
  2888.     PPCPort - a pointer to the PPC Message port
  2889.  
  2890.    RESULT
  2891.     PPCMessage - a pointer to the first PPC Message in the PPCPort msglist.
  2892.  
  2893.    SEE ALSO
  2894.     PPCGetMessage(), ppclib/message.h
  2895.  
  2896. PowerUPKernel/PPCWrite                                 PowerUPKernel/PPCWrite
  2897.  
  2898.     NAME
  2899.     PPCWrite -- Write bytes of data to a file
  2900.  
  2901.     SYNOPSIS
  2902.     returnedLength =  PPCWrite( file, buffer, length )
  2903.     gpr3                        gpr3  gpr4       gpr5
  2904.  
  2905.     LONG PPCWrite(BPTR, void *, LONG)
  2906.  
  2907.     FUNCTION
  2908.     This function is equal to the dos.library/Write function.
  2909.     It works on the context of the Msg Task each PPC Task has
  2910.     on the AmigaOS side.
  2911.  
  2912.     ATTENTION
  2913.     You must use PPCAllocMem() for the buffer, so it`s aligned
  2914.     to the PPC cache lines.
  2915.  
  2916.     INPUTS
  2917.     file - BCPL pointer to a file handle
  2918.     buffer - pointer to the buffer
  2919.     length - integer
  2920.  
  2921.     RESULTS
  2922.     returnedLength - integer
  2923.  
  2924.     SEE ALSO
  2925.     PPCOpen(), PPCClose(), PPCSeek(), PPCRead()
  2926.  
  2927. ppc.library/PPCFreeVecPooled                     ppc.library/PPCFreeVecPooled
  2928.  
  2929.    NAME
  2930.     PPCFreeVecPooled -- return PPCAllocVecPooled() memory to the system
  2931.  
  2932.    SYNOPSIS
  2933.     PPCFreeVecPooled(Pool,memoryBlock)
  2934.                      gpr3 gpr4
  2935.  
  2936.     void PPCFreeVecPooled(void*,void *);
  2937.  
  2938.    FUNCTION
  2939.     Free an allocation made by the PPCAllocVecPooled() call.  The memory will
  2940.     be returned to the system pool from which it came.
  2941.  
  2942.    INPUTS
  2943.     memoryBlock - pointer to the memory block to free, or NULL.
  2944.  
  2945.    SEE ALSO
  2946.     PPCAllocVecPooled()
  2947.  
  2948.